Property 클래스의 메쏘드를 멤버 변수처럼 접근할 수 있게 한다. (그러나 실제로는 메쏘드 이다)
일반적으로 객체 지향의 캡슐화 개념에서 클래스의 멤버 변수는 외부에서 직접 접근 및 변경을 허용하지 않도록
한다. 따라서 변수에 대한 접근과 변경은 별도로 노출한 공개 메쏘드를 통해서 이루어 지도록 한다.
이 공개된 메쏘드는 변수에 대한 사용자의 요청(접근 or 변경) 사이에 특정한 비지니스 로직을 포함하여 변수 값에 대한 투명성과 보안성을 강화 하기도 한다. 이러한 메쏘드를 갯터 , 셋터 라고 부른다.
* 프로퍼티 사용예
public string myProperty;
public string MyProperty{
get { return this.myProperty }
set { this.myProperty = value; } //value 키워드는 이 프로퍼티에 셋팅한 값이 된다
}
즉, myProperty 의 변수에 대한 접근 제어를 MyProperty 라는 프로퍼티가 수행하게 된다.
* 프로퍼티의 특징
1. 논리적인 멤버 변수
사용하는 입장에서는 단순히 변수처럼 값을 읽어오거나 셋팅하지만 프로퍼티 내부적으로 어떠한 비지니스 로직을
가질 수 있다. (일반적인 메쏘드가 그러하듯이..)
즉 사용자가 입력한 값 그대로가 저장,호출 되는 것이 아니라 특정한 로직으로 필터링 혹은 가공된 데이터가 저장,
호출될 수 있게 한다.
2. 접근과 변경(갯터,셋터)를 동일한 이름으로 사용 가능케 한다
메쏘드는 한 클래스 내에서 동일한 이름이 될 수 없다(오버로딩 말고)
그러나 프로퍼티를 사용하면 변수에 대한 읽기,쓰기를 동일한 이름의 프로퍼티를 통해서 수행할 수 있게 한다
(변수처럼..)
3. static 프로퍼티도 생성 가능하다
4. 프로퍼티는 실제로 변수가 아니다.
프로퍼티는 결국 메쏘드 인 것이다. 따라서 변수처럼 메모리 주소를 가질 수 없다. 즉 클래스의 인스턴스가 생성될
때 메모리에 올라가지 않는다. 따라서 주소값을 기반으로 하는 ref,out 키워드와 함께 인자로 사용될 수 없다
5. virtual,abstract,override 로 선언할 수 있다(일반적인 메쏘드와 동일하다)
6. void 형이 될 수 없다. (메쏘드와의 차이점)