property 소개

은닉성이란, 불필요한 정보를 외부로 노출하지 않겠다는 것이다.

 

은닉성에 대해 설명할 때 봤었던 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