이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
프로퍼티(Property)는 속성이라는 의미를 가지고 있습니다. 클래스에서 멤버 변수를 속성이라고도 하는데 우리는 정보은닉을 위해 이를 private로 선언하여 해당 변수가 선언된 클래스 외부에서 접근이 불가능하게 할 것이냐, 아니면 편의성을 위해 public으로 선언할 것이냐 고민하곤 했습니다. 그래! 정보 은닉을 위해 private로 선언하자! 생각하여 private 를 사용하면 또 불편한 점이 생겼습니다. getter 메소드와 setter 메소드를 구현해야 하는 것이죠. 이를 편리하게 해주는 C#의 프로퍼티를 배워보도록 하겠습니다.
프로퍼티 사용법
아래와 같이 우리는 private로 선언한 변수를 얻거나 세팅하기 위해 get, set 메소드를 구현해야 했습니다. 번거로운 일이었죠.
class Test {
private int age;
public int GetAge() { return age;}
public void SetAge(int num) { this.age = num; }
}
C# 프로퍼티는 간단하고 유연성 있게 전용 필드의 값을 읽거나 쓰는 메커니즘을 제공합니다. public 멤버 변수처럼 접근 할 수 있지만 실은 접근자라는 특수 메서드입니다. 이를 통해 데이터에 쉽게 액세스할 수 있으며 안정성과 유연성의 수준을 올리는데 도움이 됩니다. 아래와 같은 형식으로 작성합니다.
class 클래스명
{
데이터타입 필드명;
접근한정자 데이터타입 프로퍼티명
{
get {
return 필드명;
}
set {
필드명 = value;
}
}
}
프로퍼티 특징
1. 프로퍼티를 사용하면 클래스가 구현 또는 코드를 숨기는 동시에 값을 가져오고 설정하는 방법을 공개적으로 노출할 수 있습니다.2. get 속성 접근자는 속성 값을 반환하고, set 접근자는 새 값을 할당하는데 사용합니다.3. set 접근자의 value 키워드는 set 접근자가 할당하는 값을 정의하는데 사용합니다.4. set 접근자만을 구현하면 쓰기 전용, get 접근자만을 구현하면 읽기 전용입니다.
프로퍼티 사용 예제
프로퍼티는 유니티에서 유용하게 사용됩니다. 첫 째, 변수의 값이 개발자가 원하는 범위 이내에 들어가 항상 올바르도록 강제성을 띌 때 사용하고, set 접근자 내에 변수가 변했을 때 다른 함수나 동작을 실행할 수 있도록 합니다. 아래 코드는 private로 선언된 age를 호출하거나 조건에 맞을 때만 할당하는 프로퍼티를 이용한 스크립트입니다. 참고하시고 프로퍼티의 사용법과 어디에 사용할지를 생각해보시기 바랍니다.
using UnityEngine; using System.Collections; public class Hero : MonoBehaviour { private int age; public int Age { get { return age; } set { if (value < 20) { print ("20세 미만은 사용 불가합니다."); } else { age = value; AgeChanged (); } } } // Use this for initialization void Start () { // Set value of Age Age = 10; // value is under 20 so assign value is fail. // Set value of Age Age = 25; // value is over 20 so assign value is success. } void AgeChanged() { print ("나이가 변경되었습니다."); } // Update is called once per frame void Update () { } }
8 : private로 선언된 age 변수를 위한 접근자로 Age 프로퍼티를 선언
10 : Age를 호출하거나 사용하면 age 변수를 반환한다.
13 - 20 : Age에 값을 할당할 때 조건에 맞으면 할당하거나 값이 변경됬음을 알리는 함수를 포함할 수 있다.
자동으로 구현된 프로퍼티
프로퍼티가 유용한 것은 알았으나 get, set 메소드를 작성하는 것과 뭐가 다르냐, 비슷한 코드 줄 수를 가지고 있는데! 라고 생각하실 수 있습니다. 프로퍼티를 사용해 클래스의 변수에 대해 감추면서 사용할 수 있으면서도, 코드를 간결하게 할 수 있는 자동으로 구현된 프로퍼티라는 것이 있습니다. get, set 접근자를 통해 추가적인 논리가 필요하지 않은 경우 간결하게 사용할 수 있는 것입니다.
위와 같이 get, set 접근자 안에 아무것도 안쓰는 경우 private 변수를 생성하지 않고 프로퍼티 자체를 사용합니다.
변수 할당과 반환만을 사용하는 프로퍼티가 완성된 것입니다.
반응형
'Frontend > Unity' 카테고리의 다른 글
[유니티 디버깅] ① 컴파일 오류 & 콘솔 (0) | 2016.08.02 |
---|---|
[유니티 C# 기초 강의] 11. 클래스와 다형성 (4) | 2016.07.26 |
[유니티 C# 기초 강의] 10. 클래스와 상속 (2) | 2016.07.25 |
[유니티 C# 기초 강의] 8. 반복문 (2) | 2016.07.25 |
[유니티 C# 기초 강의] 7. 배열 (3) | 2016.07.25 |
[유니티 C# 기초 강의] 6. 조건문 (3) | 2016.07.24 |