Deff_Dev

[Unity/C#] 프로퍼티 본문

Unity(유니티)/유니티 공부

[Unity/C#] 프로퍼티

Deff_a 2024. 3. 14. 00:13

해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.

 

멤버 변수를 public으로 선언 후 사용 시 멤버 변수의 은닉성을 지키지 못하기 때문에

 

→ 멤버 변수의 은닉성을 지키기 위해 Get(), Set() 멤버 함수를 사용한다.

 

하지만 이 방법은 멤버 변수를 많이 선언할 수록 Get/Set 메소드 쌍이 많아지고, 변수에 접근한다는 개념이 아닌 메소드에 접근한다는 느낌이 크다.

 

 

해당 문제를 조금이라도 해소하기 위해 프로퍼티를 사용한다.


프로퍼티

  • 멤버 변수의 은닉성을 보장
  • 변수에 접근하는 것과 같이 대입 연산자 (=) 사용 가능

  • get {…} 접근자 : 멤버 변수로 부터 값을 읽어옴
  • set {…} 접근자 : 멤버 변수에 값을 할당함
  • value : set 접근자의 암묵적 매개 변수로 즉, 멤버 변수에 저장하고 싶은 값
  • get, set의 내용이 한 줄 일때는 중괄호를 생략 가능

 

PlayerPlayer2의 프로퍼티는 같은 기능을 한다.

 

멤버 변수 개수가 많을 경우 작성해야 할 내용을 줄일 수 있는 프로퍼티도 존재한다.

 

자동 구현 프로퍼티 (Player2)

  • 멤버 변수를 선언할 필요가 없다.
  • get, set의 기본형이 자동으로 작성된다.
  • 프로퍼티로 접근하는 변수는 컴파일러가 자동 생성하기 때문에 위 예제에서는 CurrentHP 프로퍼티를 이용해 접근하면 된다.

읽기/쓰기 전용 프로퍼티

  • 프로퍼티 내부에 get만 지정하면 읽기 전용
  • 프로퍼티 내부에 set만 지정하면 쓰기 전용

 

 

private 접근 지정자를 이용하여 현재 클래스 내부에서만 get, set 프로퍼티를 사용할 수 있다.


인터페이스의 프로퍼티

  • 클래스의 자동 구현 프로퍼티와 동일한 모습을 하고 있지만 인터페이스의 프로퍼티는 컴파일러가 구현을 해주지 않는다.
  • 인터페이스는 구현부가 없기 때문에 인터페이스를 상속받은 클래스에서 프로퍼티를 재정의 해야한다.


추상 클래스의 프로퍼티

  • 일반 클래스처럼 구현된 프로퍼티를 가질 수도 있고, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다.

 

프로퍼티 생성자를 이용해 멤버 변수들을 초기화하고 출력하는 예제

결과