# property 개념 및 사용법
property는 멤버 변수의 get, set 함수를 직접 만드는 과정을
편하게 해주는 기능으로 사용법은 아래와 같다
protected int hp; // 변수
public int Hp // getter, setter
{
get { return hp; }
set { this.hp = value }
}
get set 중에서 둘 중 하나만 작성해서 하나를 막을 수도 있고
private을 붙여 외부에서만 사용제한도 가능하다
# 자동 구현 property
멤버 변수의 get, set 함수 내부에서
기본 기능(단순히 get, set)만 하는 경우에는
아래와 같이 자동 구현 propety를 활용하면 된다
public int Hp { get; set; } // 변수 생성 자동 + getter, setter
위의 자동 구현 propety는 아래와 동일한 의미를 가진다
// 위와 동일
private int _hp;
public int GetHp() { return _hp; }
public void SetHp(int value) { _hp = value; }
# property 활용
property 자체를 다양하게 활용할 수 있다
get, set에 접근지정자를 붙일 수 있고
기능 자체를 막는 방법도 있다
또한, 초기화 문법도 당연히 적용이 된다
public int Hp { get; private set; } // 클래스 내부에서만 set 가능
public int Sp { get; } // 생성자에서만 set 가능 (잘 사용되지 X)
public int Mp { get; set; } = 100; // 초기화 문법도 가능
# property vs public
// property
public int Hp { get; set; }
// public
public int hp;
위처럼 property를 사용하는 경우와
그냥 변수 자체를 public으로 열어주는 경우의 차이점에 주목해야 한다
property는 변수 자체의 접근을 막고
get, set 함수로 작동하는 Hp를 열어준 것이다
public은 변수 자체의 접근을 열어준 것이다
이처럼, 내부적으로는 큰 차이가 있긴 하지만
사실상 단순하게만 보면 큰 차이가 없어 보인다
그러나 멤버변수를 외부에서 getter나 setter가 아닌
직접 접근하는 방식을 열어둔 다는 것은 매우 위험한 방식이다
또한, get set 내부를 직접 수정하거나 내용이 추가되는 경우가
자주 발생되기에 property를 쓰는 것이 적절하다
# 결론
변수를 생성할 때는
아래처럼 property 자동 구현 버전을 사용하면 된다
상황에 따라 접근지정자 혹은 특정 기능을 막아주면 된다
public int Hp { get; set; } = 100; // 일반적인 경우
public int Sp { get; private set; } = 100; // 특정 함수는 막는 경우
그리고 상황에 따라서
getter, setter 함수 내부를 구현해야 하는 경우가 필요하면
아래처럼 변수를 따로 직접 빼주고 아래와 같이 활용하면 된다
private int hp;
public int Hp
{
get { return hp; }
set
{
if (!bIsDead)
hp = value;
}
}
'C# > [루키스] 실전 문법' 카테고리의 다른 글
[C# 섹션 8] Exception (2) | 2025.06.26 |
---|---|
[C# 섹션 8] Lambda (0) | 2025.06.25 |
[C# 섹션 8] Event (0) | 2025.06.25 |
[C# 섹션 8] Delegate (0) | 2025.06.25 |
[C# 섹션 8] Interface (0) | 2025.06.24 |