C# : 속성(property)


속성이란?

클래스의 필드에 접근하거나 수정하는 방식을 정의하는 메서드이다.

쉽게 비유하면,
변수를 직접 건드리는 건 막아놓고, 문지기를 하나 둬서
해당 변수와의 상호작용은 전부 문지기를 통하게 하는 것이다.

property의 장점
변수에 대한 제어를 통제할 수 있다.
누가 변수를 사용했는지, 어떻게 수정했는지 알 수 있다.
값을 수정하기 전에 유효성 검사를 할 수 있다.


필드와 속성의 차이점

public class Example
{
    public int MyProperty { get; set; } // 자동 구현 프로퍼티
}

이렇게 간략하게 써놓으면

private int _myProperty; // 자동 생성된 백킹 필드

public int MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

컴파일러가 알아서 property답게 해석하여 변환한다.
이것을 자동 구현 프로퍼티라고 한다.

하지만 이래서야 그냥 필드를 선언한 것과 차이점이 없어보인다.
public int MyProperty; 이것과 완벽하게 하는 일이 똑같지 않은가?

굳이 필드 대신 자동 구현 속성을 사용하는 이유가 몇 가지 있다.

  • 속성은 인터페이스에서 선언할 수 있다.
  • get이나 set 중 필요한 것만 외부에 보여줄 수 있다.
  • 속성은 상속 관계(abstract, virtual, override)를 위한 modifier를 사용할 수 있다.
  • 디버깅할 때 속성에 중단점을 설정하면 누가 언제 접근했는지 알 수 있다.
  • 대부분의 라이브러리는 Data binding에 속성만을 사용할 수 있다.
  • 코드에 일관성을 줄 수 있다. 2개는 필드, 2개는 속성이라면 전부 속성으로 통일하는게 나을 수 있다.

Data binding이란?
앱 UI와 해당 UI가 표시하는 데이터를 연결하는 프로세스이다.
데이터 값이 변경될 때 데이터에 바인딩된 요소에 변경 사항이 자동으로 반영된다.