Deff_Dev
[Unity/C#] 프로퍼티 본문
해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.
멤버 변수를 public으로 선언 후 사용 시 멤버 변수의 은닉성을 지키지 못하기 때문에
→ 멤버 변수의 은닉성을 지키기 위해 Get(), Set() 멤버 함수를 사용한다.
하지만 이 방법은 멤버 변수를 많이 선언할 수록 Get/Set 메소드 쌍이 많아지고, 변수에 접근한다는 개념이 아닌 메소드에 접근한다는 느낌이 크다.
해당 문제를 조금이라도 해소하기 위해 프로퍼티를 사용한다.
프로퍼티
- 멤버 변수의 은닉성을 보장
- 변수에 접근하는 것과 같이 대입 연산자 (=) 사용 가능
- get {…} 접근자 : 멤버 변수로 부터 값을 읽어옴
- set {…} 접근자 : 멤버 변수에 값을 할당함
- value : set 접근자의 암묵적 매개 변수로 즉, 멤버 변수에 저장하고 싶은 값
- get, set의 내용이 한 줄 일때는 중괄호를 생략 가능
Player와 Player2의 프로퍼티는 같은 기능을 한다.
멤버 변수 개수가 많을 경우 작성해야 할 내용을 줄일 수 있는 프로퍼티도 존재한다.
자동 구현 프로퍼티 (Player2)
- 멤버 변수를 선언할 필요가 없다.
- get, set의 기본형이 자동으로 작성된다.
- 프로퍼티로 접근하는 변수는 컴파일러가 자동 생성하기 때문에 위 예제에서는 CurrentHP 프로퍼티를 이용해 접근하면 된다.
읽기/쓰기 전용 프로퍼티
- 프로퍼티 내부에 get만 지정하면 읽기 전용
- 프로퍼티 내부에 set만 지정하면 쓰기 전용
private 접근 지정자를 이용하여 현재 클래스 내부에서만 get, set 프로퍼티를 사용할 수 있다.
인터페이스의 프로퍼티
- 클래스의 자동 구현 프로퍼티와 동일한 모습을 하고 있지만 인터페이스의 프로퍼티는 컴파일러가 구현을 해주지 않는다.
- 인터페이스는 구현부가 없기 때문에 인터페이스를 상속받은 클래스에서 프로퍼티를 재정의 해야한다.
추상 클래스의 프로퍼티
- 일반 클래스처럼 구현된 프로퍼티를 가질 수도 있고, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다.
프로퍼티 생성자를 이용해 멤버 변수들을 초기화하고 출력하는 예제
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] ArrayList (0) | 2024.03.20 |
---|---|
[Unity/C#] 컬렉션 (Collection) (0) | 2024.03.20 |
[Unity/C#] 이름 공간 (namespace) (0) | 2024.03.12 |
[Unity/C#] static (정적 메소드, 정적 변수, 정적 클래스, 확장 메소드) (0) | 2024.03.12 |
[Unity/C#] 구조체, 튜플 (0) | 2024.03.12 |