코딩/C#

[C#] 프로퍼티(Property)

뎀스 2021. 1. 12. 16:28

 

C++을 사용할때는, 은닉성을 유지하기 위해, 변수의 기본 접근 지정자를 private으로 지정하고

getter, setter같은 함수(메소드)를 만들어서 사용하곤 했다.

 

위와 같은 방법을 C#에서는 조금 더 유연하고 편리한 방법을 제공하는데,

그것이 바로 프로퍼티이다.

 

기존의 getter,setter를 만드는 방식을 Get, Set 접근자를 이용해서 대체해준다.

 

 

class MyClass
{
	private:
	 int age = 0;
	 string name = "";
    
	public:
	 int Get_Age() { return age; }
	 string Get_Name() { return name; }
    
	public:
	 void Set_Age(int Age) { age = Age; }
	 void Set_Name(string Name) { name = Name; }
}	

이런식의 코드를

 

class MyClass
{
 public string Name {get; set;}
 public int Age {get; set;}
}

이런식으로 간단하게 바꿔줄 수 있다.

하지만 위는 단순하게 필드를 get,set만 할 때인 자동구현 프로퍼티이고,

 

 

만약 get이나 set 할때 특수한 처리를 하고 싶으면 코드 블럭을 열고,

get { /* 특수 처리 */ 필드 = value; } 을 해주면 된다.

class MyClass
{
 private string name;
 public string Name 
 {
 get
 {
  // 특수 처리
  return name;
 }
 set
 {
  // 특수 처리
  name = value;
 }
 }
}

왜 자동구현 프로퍼티는 private필드를 따로 만들지 않고, 여기선 따로 만들었냐면

자동 구현 프로퍼티로 쓰게 되면, C#의 컴파일러가 자동으로 프로퍼티를 위한 private필드를 만들어서 사용하게 된다.

 

그리고 읽기 전용으로 만들고 싶으면, get만 만들고 set 접근자를 구현하지 않는 등의 접근도 가능하다.