[Unity] 프로퍼티(Property)

Kim Yuhyeon·2023년 4월 18일
0

게임개발

목록 보기
87/135

참고

[Unity C#] #14 프로퍼티 (Property) - 고박사의 유니티 노트

프로퍼티 (Propoerty)


public 멤버 변수

유혹

변수 은닉을 신경쓰지 않으면 변수에 원치 않는 값이 들어갈 수 있지만
은닉과 캡슐화를 지키기에 너무 귀찮아서 그냥 pulblic을 쓰고 싶다 .. (매우 공감ㅎ)

은닉

멤버 변수의 은닉성을 지키기 위해 Get(), Set() 멤버 함수를 이용

멤버 변수의 은닉성과 캡슐화 문제점
멤버 변수를 많이 선언할수록 Get/Set 메소드 쌍이 많아지고,
변수에 접근한다는 개념이 아닌 메소드에 접근한다는 느낌이 크다.

프로퍼티 선언

  • 멤버 변수의 은닉성 보장
  • 변수에 접근하는 것과 같이 대입 연산자(=) 사용 가능
  • get { .. } 접근자는 멤버 변수로부터 값을 읽어오고
  • set { .. } 접근자는 멤버 변수에 값을 할당한다.
  • set { .. } 접근자 안에 있는 value 키워드는 set 접근자의 암묵적 매개 변수
    (set으로 할당한 값이 value에 저장됨)

여러줄 버전

public class Player 
{
	데이터형식 멤버변수이름;
    접근지정자 데이터형식 프로퍼티이름
    {
    	get 
        {
        	return 멤버변수이름;
        }
        set 
        {
        	멤버변수이름 = value;
        }
    }
}

한 줄 버전

public class Player 
{
	데이터형식 멤버변수이름;
    접근지정자 데이터형식 프로퍼티이름
    {
    	get => return 멤버변수이름;
        set => 멤버변수이름 = value;
        
    }
}

자동 구현 프로퍼티

  • 멤버 변수 개수가 많을 경우 작성해야 할 내용을 줄이기 위한 프로퍼티
  • 멤버 변수를 선언할 필요가 없다.
  • get, set의 기본형이 자동으로 작성된다.

[Tip]
자동 구현 프로퍼티에서 CurrentHP 프로퍼티로 접근하는 변수는 컴파일러가 자동 생성한다.
그렇기 때문에 우리는 변수의 이름을 모르고, 그 변수에 접근하려면 CurrentHP 프로퍼티를 이용해야 한다.

읽기/쓰기 전용 프로퍼티

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

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

프로퍼티와 생성자

  • 객체 생성 시 생성자를 이용하지 않고 초기화 하는 방법
클래스이름 객체인스턴스 = new 클래스이름()
{
	// 콤마를 이용해 구분하며, 마지막 데이터는 뒤에 아무것도 붙이지 않는다.

	프로퍼티1 = 값,
    프로퍼티2 = 값,
    프로퍼티3 = 값
}

인터페이스의 프로퍼티

  • 클래스의 자동 구현 프로퍼티와 동일한 모습을 하고 있지만 인터페이스의 프로퍼티는 컴파일러가 구현을 해주지 않는다.
interface 인터페이스이름
{
	데이터형식 프로퍼티이름1 
    {
     	get; set;
    }
}
public class 자식클래스 : 인터페이스이름
{
	public 데이터형식 프로퍼티이름1 
    {
     	// get, set 구현
    }
}
  • 예시

추상 클래스의 프로퍼티

  • 일반 클래스처럼 구현된 프로퍼티를 가질 수도 있고, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다.
public abstract class 클래스이름
{
	abstract 접근지정자 데이터형식 프로퍼티이름1 
    {
    	get; set;
    }
}
public class 자식클래스 : 추상클래스이름
{
	public override 데이터형식 프로퍼티이름1
    {
    	//get, set 구현
    }
}
  • 예시

추상프로퍼티 Shield의 get; set;은
자동 구현 프로퍼티가 아닌 구현부가 없는 선언 자식 클래스에서 재정의 해야한다.

0개의 댓글