은닉성이란, 불필요한 정보를 외부로 노출하지 않겠다는 것이다.
은닉성에 대해 설명할 때 봤었던 Get과 Set 함수들을 보면
만약 정말 필요한 경우는 함수를 통해 접근 가능하도록 구현했었다.
참고로 Get과 Set 함수에 break point를 잡고 호출 스택을 보는 것으로 디버깅을 하면 편리하다.
C++에서는 이렇게 get과 set 함수를 일일이 사용하는게 최선이었겠지만,
C#에서는 더 편리한 property라는 문법이 있다.
함수랑 거의 비슷한데, 예를 들어 GetHp과 SetHp을 합친 프로퍼티를 만들어보자
class Knight
{
protected int hp;
public int Hp
{
get {return hp;}
set {this.hp = value;}
}
}
main()
{
Knight knight = new Knight();
knight.Hp = 100;
int hp = knight.Hp;
}
public int Hp{ } 라는 프로퍼티를 만들었다.
this.hp에 어떤 값을 채워야할텐데, 여기에서 디폴트값으로 value라는 키워드를 사용한다.
코드를 보면, Hp함수를 호출하는 것으로 값을 설정하고 변수에 할당할 수 있다.
여기에 각각 set과 get이 작동한다.
이것을 보면 굳이 프로퍼티를 사용해야하나 싶지만
Hp함수 하나로 get, set을 한번에 관리할 수 있다는 것에 의미가 있다.
더 나아가서 자동구현 프로퍼티라는 것이 있다.
class Knight
{
public int Hp
{ get; set;}
private int _hp;
public int GetHp() {return _hp;}
public void SetHp(int value) { _hp = value;}
}
필드도 입력하지 않고 함수에 get set만 입력해도 자동으로 아래 의미로 동작한다.
은닉성을 제공하고 싶을 때, 보통 private이나 protected로 선언하고
접근할 수 있는 public 함수를 따로 선언했었다면
이제는 그냥 프로퍼티를 사용하는 것으로 간단하게 관리할 수 있다.
프로퍼티란 것이 사실상 함수기는 하지만, 마치 public 변수를 접근하는 것처럼 사용할 수 있다.
사용성도 편리하고 은닉성도 챙길수있는 문법이다.
'언어 > C#' 카테고리의 다른 글
lamda (2) | 2024.07.25 |
---|---|
delegate 와 event 소개 (0) | 2024.07.09 |
추상 클래스와 인터페이스 (0) | 2024.07.08 |
generic 타입 소개와 object, var 대신 사용하는 이유 (0) | 2024.07.08 |
배열과 리스트, 딕셔너리 (2) | 2024.07.04 |