기록
[C#] 프로퍼티 본문
프로퍼티(Property)
- '속성'이라는 의미를 가지고 있다
클래스에서 멤버변수를 속성이라고도 하는데, 우리는 정보은닉을 위해 이를 private로 선언하여 해당 변수가 선언된 클래스 외부에서 접근이 불가능하게 할 것이냐, 아니면 편의성을 위해 public으로 선언할 것이냐 고민한다.
private를 사용하면 불편한 점
- getter 메소드와 setter 메소드를 구현해야 함
이를 편리하게 해주는 C#의 프로퍼티를 배워보자.
아래는 기존에 구현하던 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 : MonoBehavior {
private int age;
public int Age { // private로 선언된 age 변수를 위한 접근자로 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
Age = 25; // value is over 20 so assign value is success
}
void AgeChanged() {
print ("나이가 변경되었습니다.");
}
// Update is called once per frame
void Update () {
}
}
자동으로 구현된 프로퍼티
프로퍼티를 사용해 클래스의 변수에 대해 감추면서 사용할 수 있으면서도,
코드를 간결하게 할 수 있는 자동으로 구현된 프로퍼티라는 것이 있다.
get, set 접근자를 통해 추가적인 논리가 필요하지 않은 경우 간결하게 사용할 수 있는 것이다.
public class Enemy {
public string name { get; set; }
public int hp { get; set; }
public int attack { get; set; }
public float speed { get; set; }
}
위와 같이 get, set 접근자 안에 아무것도 안쓰는 경우 private 변수를 생성하지 않고 프로퍼티 자체를 사용한다.
다음은 변수 할당과 반환만을 사용하는 프로퍼티이다.
Enemy myself;
// Use this for initialization
void Start () {
mySelf = new Enemy();
mySelf.hp = 100;
mySelf.attack = 50;
mySelf.speed = 0.5f;
mySelf.name = "Goblin";
}
void OnMouseDown() {
print ("Name : " + mySelf.name);
print ("Hp : " + mySelf.hp);
print ("Attack : " + mySelf.attack);
print ("Speed : " + mySelf.speed);
}
'[Study] > 프로그래밍 언어' 카테고리의 다른 글
[C++] 문자열 자르기 (strtok) (0) | 2020.06.04 |
---|---|
[JAVA] 싱글톤(Singleton) 패턴 (0) | 2018.09.09 |
[JAVA] 정적 멤버와 static (0) | 2018.09.09 |