get set 속성의 용법은 결국 다른 클래스에 값을 저장했다 불러오는 용도로 쓰려는것 같은데
그럴거면 차라리 그냥 다른 public 클래스에 필드 하나 만들어서 거기 저장했다 빼오는게 좋지 않을까?
예를들면
class property
{
int a;
public int b
{
get
{
return a;
}
set
{
a = value;
}
}
}
이런 코드보다
class property
{
public int b;
}
이렇게 하면, 어차피 복잡하게 get set 속성 안써도 그냥 property.b 로 바로 값저장,값호출 할 수 있잖아?
왜 굳이 속성을 쓰는거임?
너가 모르는 사실 하나가 있는데, get set 모두 메서드처럼 코딩 가능함
2차원 평면상의 사각형을 정의하는 Rect라는 클래스가 있고, 이 클래스는 생성자에서 좌측상단 좌표와 우측하단 좌표만 받는다고 해보자
그럼 우측상단 좌표의 (x, y) 값은 (우측하단.X, 좌측상단.Y)가 되지? 근데 이거 공식 일일이 쓰기엔 여러군데에서 코드 중복이 일어나잖아. 그러면 메서드로 분리하면 좋겠지? 그래서 GetTopRightPos() 라는 메서드를 만들었어. 추가로 공식에 따라서 setter도 만들어줄 수 있을것 같아. 그럼 SetTopRightPos(인자)라는 메서드를 하나 더 만들면 되겠지?
아씨바거 메서드 두 개나 만들어야 하노;;; 해서 나온게 프로퍼티다
TopRightPos { get { return new Point(BottomRightPos.X, TopLeftPos.Y); } set { BottomRightPos.X = value.X; TopLeftPos.Y = value.Y; } } 이렇게 하면 메서드 일일히 안나누고서도 구현할 수 있잖아
예제 하나 더 주자면 게임의 HP(체력) 값이 protected m_characterHp라는 변수에 저장되어 있고 HP의 프로퍼티를 characterHp 라고 해보자. 캐릭터의 최대 HP값은 maxHp 라는 변수에 저장되어있다고 할 때, characterHp는 { get { return m_characterHp; } set { m_characterHp = (value + m_characterHp < maxHp) ? value + m_characterHp : maxHp; } } 로 정의할 수 있음
dd//일일히->일일이 (틈틈이 간간이 누누이 곰곰이 일일이 번번이 깨끗이 깊숙이 등등..) [리듬 맞춤법 봇♬]
ㄴ씨발련아 위에서는 일일이라고 썼다 ㅡㅡ
ㅇㅇ 위에 ㅇㅇ흉이 잘 얘기해줬는대 추가로 범위체크나 이런걸 외부에 안 드러나게 해줄수 있죠. 필드로 해놓으면 그건 전부 클라이언트 책임이고요. 글고 oop월드에선 그렇게 다 까발려진거 혐오함