【코드로 아는 UML 시리즈】 속성과 속성

.NET 속성



.NET에서 개발하고 있는 사람은, 프로퍼티라고 알고 있지요.
이것입니다 ↓.

Sample1.cs
class Sample {
    // フィールド
    private string property1;
    // プロパティ
    public string Property1
    {
        set{
           this.property1 = value;
        }
        get{
           return this.property1;
        }
    }
}

이것은

Sample4.cs
class Sample {
    // プロパティ
    public string Attribute1 { set; get; }
}

어떻게 쓸 수 있습니다.

Microsoft의
『프로그래밍 .NET Framework 제4판』
제10장 프로퍼티 P254에,

형태의 필드를 외부에 공개하면, 오브젝트의 스테이트를 파괴해 버리는 방법으로 필드를 부정하게 사용하는 코드를 기술해 버릴 위험성이 높아진다

형식의 데이터 필드에 대한 액세스 캡슐화

속성(property)이라는 구조를 제공합니다.

라고 써 있습니다.

즉, 속성은 데이터 필드에 대한 액세스를 캡슐화하는 메커니즘입니다.

위의 Sample3.cs 코드에 주석을 달았지만 private 부분은 필드입니다.
public 부분이 속성입니다.

Sample4.cs의 예는 원래 주역이어야하는 필드를 구현하지 않고,
지원 역할의 속성만 구현합니다.
뭔가 위화감 없습니까?

UML 속성



UML에서 속성이라고 하면 클래스의 속성을 나타내는 형식의 이름입니다.
속성=attribute
속성의 유형은 property입니다.

이 그림의 관계입니다.
"클래스는 속성 유형의 속성이 있습니다"입니다.

.NET 속성과 UML 속성의 차이



즉, .NET 속성은 .NET에서 제공되는 데이터 필드를 캡슐화하는 메커니즘이며,
UML의 속성은 속성의 유형이므로 완전히 다르다는 것을 알 수 있습니다.

UML의 속성을 코드로 표현하면



그럼 다시 UML의 속성을 코드로 표현해 보겠습니다.



C# 캡슐화하는 메커니즘을 사용하지 않는 경우

Sample2.cs
class Sample {
    // フィールド
    public string attribute1;
}

C# 캡슐화하는 메커니즘을 사용하는 경우

Sample3.cs
class Sample {
    // フィールド
    private string attribute1;
    // プロパティ
    public string Attribute1
    {
        set{
           this.attribute1 = value;
        }
        get{
           return this.attribute1;
        }
    }
}

위의 샘플 코드 (Sample1.cs)에서,
필드에, 「프로퍼티의 이름의 선두를 소문자로 한 이름」을 붙이고 있었습니다.
또한 위의 샘플 코드 (Sample4.cs)에서,
필드 자체가 등장하지 않습니다.

본래는, 속성은 속성을 캡슐화하는 구조일 뿐이기 때문에,
필드가 주역인 것이 자연입니다.

속성은 메서드의 일종이며 필드의 일종이 아니기 때문에,
속성이 메소드 주체로 구현되는 데는, 위화감이 수반합니다.

사소한 것일지도 모르지만, UML 모델링과 구현 코드의 관계를 생각할 때는,
이런 원래의 생각을 소중히 하고 싶습니다.

요약



C# 속성은
UML의 속성이라고 생각하거나,
C#에서 속성을 구현하는 방법이라고 생각하는 사람들이 많지만,
어느 쪽도 아닙니다.

UML의 속성은 C# 코드에서,
· 필드 또는
・필드+캡슐화하는 구조
로 표현할 수 있습니다.

좋은 웹페이지 즐겨찾기