난 유니티를 사용하면서 property(속성)가 있는 줄도 몰랐었다.

여러 에셋들의 소스코드를 까보면 자주 보이기도 하고, 공부해보니까 자주 쓰면 좋겠다 싶어서 글을 정리하기로 했다.

 

참고한 블로그

https://arainablog.tistory.com/102

 

get 접근자, set 접근자

- 참고 링크 속성은 필드 및 메서드 모두의 측면을 결합합니다.Properties combine aspects of both fields and methods. 개체의 사용자에게 속성은 필드로 표시되며, 속성에 액세스하려면 동일한 구문이 필요합

arainablog.tistory.com

https://itmining.tistory.com/34

 

[유니티 C# 기초 강의] 9. 프로퍼티

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론 프로퍼티(Property)는 속성이라는 의미를 가지고 있습니다. 클래스에서 멤버 변수를 속성이라고도 하는데 우리는 정보은닉을 위해 이를 private

itmining.tistory.com

 

1.Property(속성) 특징

1. C#에서 사용가능한 데이터 접근 방식 중에 하나이다.

2. get 속성 접근자는 속성 값을 반환 / set접근자는 새 값을 할당하는데 사용

3. set 속성 접근자의 value 키워드는 set 접근자가 할당하는 값을 정의할 때 사용

4. get은 외부에서 해당 프로퍼티에 접근하여 읽어야 하는 상황에서 호출

5. set은 외부에서 해당 프로퍼티에 접근하여 값을 할당하는 상황에서 호출

6. 유니티의 인스펙터창에서 보이지 않는다.

 

- 외부에서 클래스 변수에 값을 할당 할 때, 변수의 값이 변경되었을 때를 감지하여, 다른 함수나 동작을 실행하길 원한다.

- 해당 변수를 여러 곳에서 가져가서 조건을 사용하는 것을 편하게 하기 위해서 사용한다.

 

1.Property(속성) 사용방법

 

자동으로 구현되는 프로퍼티

- 프로퍼티를 사용해 클래스의 변수에 대해 감추고 사용하기 위함 / 코드가 간단함.

- private 변수를 생성하지 않고 프러퍼티 자체를 사용한다.

- 조건이 없고, 단순히 변수 값을 할당하거나 반환 용도

- get, set 접근자 안에 아무것도 쓰지 않으면 프로퍼티 그 자체를 사용할 수 있다.

 

간단한 사용 예시이다.

public class PlayerInfo
{
    public string nickName {get; set;}
    public int level {get; set;}
    public int hp {get; set;}
    public int mp {get; set;}
}
PlayerInfo playerinfo;

void Start()
{
	playerinfo.nickName = "Simbble";
    playerinfo.level = 26;
    playerinfo.hp = 100;
    playerinfo.mp = 50;
}

void Update()
{
	if(Input.GetKeyDown(Keycode.E))
    {
    	Debug.Log(playerinfo.nickName);
        Debug.Log(playerinfo.level);
        Debug.Log(playerinfo.hp);
        Debug.Log(playerinfo.mp);
    }
}

 

 

 

프로퍼티 사용

- 변수의 값이 개발자가 원하는 범위로 조건을 둘 수 있다.

- set 접근자 내에 변수가 변했을 때, 다른 함수나 동작을 실행할 수 있다.

- 클래스가 구현 또는 코드를 숨기는 동시에 값을 가져오고 설정하는 법을 공개적으로 노출할 수 있다.

using UnityEngine;
using ~~~~~~~~~~~;

public class Player : MonoBehaviour
{
    private int hp;

    public int PlayerHP
    {
        get 
        {
            return hp; // 속성 값을 반환
        }
        set 
        {
            if(value<10)
            {
                Debug.Log("해독제를 사용했습니다.")
            }
            else
            {
                hp = value;
            }
        }

        void Start()
        {
            PlayerHP = 5; // 해독제를 사용했다는 디버그가 찍히겠죠.
            // playerHP = 15; // 플레이어의 체력이 바뀌고 끝나겠죠.
        }
    }
}