속성(Property)
다루는 내용
- 속성
- 액세스 수준이 서로 다른 속성
- 접근자 내부 구현을 생략하는 간단한 속성
속성은 필드 값을 읽고 쓰거나 계산하기 위한 메커니즘을 제공되는 멤버이다. 이를 통해 데이터의 안정성과 유연성을 높일 수 있으며 사용자로 하여금 멤버처럼 쉽게 액세스를 가능하게 해 준다.
이러한 속성은 실제로는 특별한 접근자라는 특별한 메소드로 코드 구현 과정을 숨긴 채 값을 가져오고 설정하는 방식을 공개적으로 노출할 수 있다.
Look & Feel & Think
il코드를 dump를 할 수 있는 ildasm.exe 유틸을 통해 실제 속성이 어떻게 정의되어 있는지 확인해 볼 수가 있다.
ildasm 유틸을 통해 실행 이미지를 열어보면 Iq속성의 get 접근자는 int get_Iq()의 모습을 하고 있고 set 접근자 void set_Iq(int value)의 모습을 하고 있다는 것을 쉽게 인지할 수 있다. 즉, 속성을 정의를 하면 이를 컴파일 전개 과정에서 접근자 메소드로 변형이 되는 것이다. |
속성은 경우에 따라서는 get 접근자와 set 접근자의 액세스 수준을 다르게 할 수 있으며 set메소드를 구현하지 않고 읽기 전용 속성으로 정의할 수도 있다. 또한, 사용자 지정 접근자 코드가 필요로 하지 않는 경우에는 구현을 생략하고 추가할 접근자만 명시함으로써 컴파일러가 내부적으로 전용 익명 필드를 만들게 할 수도 있다.
Look & Feel & Think
아래의 예는 get 접근자의 액세스 수준은 public하게 하고 set 접근자의 액세스 수준은 private하게 서로 액세스 수준을 다르게 설정을 한 예이다.
다음과 같이 속성의 구현이 필요없을 경우에는 접근자를 선언만을 하여도 된다. 단, 이와 같은 경우에는 get 접근자와 set 접근자 모두를 선언해야 하며 읽기 전용의 속성을 원한다면 set 접근자의 액세스 수준을 private로 지정하는 방법을 통해 외부에 대해서는 읽기 전용의 속성으로 정의할 수 있다.
|
'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글
17. 인터페이스(Interface) (0) | 2009.08.19 |
---|---|
16. 다형성 (0) | 2009.08.19 |
15. 상속 (0) | 2009.08.19 |
14.정적 클래스 및 정적 멤버 (0) | 2009.08.19 |
13.메소드 (0) | 2009.08.19 |
11.Class (0) | 2009.08.19 |
10.Casting (0) | 2009.08.19 |
9.String (0) | 2009.08.19 |
8. Object (0) | 2009.08.19 |
7. 배열 (0) | 2009.08.19 |