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

2016. 7. 25. 19:20· Frontend/Unity


이 글은 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
'Frontend/Unity' 카테고리의 다른 글
  • [유니티 C# 기초 강의] 11. 클래스와 다형성
  • [유니티 C# 기초 강의] 10. 클래스와 상속
  • [유니티 C# 기초 강의] 8. 반복문
  • [유니티 C# 기초 강의] 7. 배열
에반황
에반황
"어른이면서 애이기도 하고 싶다."
에반황
에반, 어른반
에반황
전체
오늘
어제
  • 전체보기 (118)
    • About (1)
    • Backend (5)
      • Django (3)
      • Spring (2)
    • Database (2)
      • 아키텍처 (0)
      • SQL (0)
      • Redis (2)
      • 코딩 테스트 (0)
      • 요구 사항 해결 (0)
    • Infra, Cloud (0)
      • AWS (0)
      • GoCD (0)
      • Docker (0)
      • Kubernetes (0)
      • Mesos Marathon (0)
    • Basic (34)
      • C (1)
      • C# (4)
      • C++ (1)
      • Java (9)
      • Javascript (6)
      • Typescript (5)
      • GO (0)
      • Python (4)
      • 프로그래밍 기초 (1)
      • 게임 디자인 패턴 (1)
      • 운영체제 (0)
      • 알고리즘 (2)
      • 자료구조 (0)
    • Computer Science (0)
    • Frontend (74)
      • Swift (1)
      • Unity (31)
      • Android (13)
      • Vue.js (2)
      • Phaser (1)
      • Cocos2D JS (2)
      • Cocos Creator (16)
      • Facebook Instant Game (8)
반응형

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
에반황
[유니티 C# 기초 강의] 9. 프로퍼티
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.