기록

[C#] 프로퍼티 본문

[Study]/프로그래밍 언어

[C#] 프로퍼티

Dannnnnn 2018. 10. 17. 17:03
반응형

프로퍼티(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