C#

[C#]프로퍼티(Property) - get, set 사용

DevStory 2021. 5. 8.

프로퍼티(Property)C#에서 클래스 내부의 변수를 읽거나 값을 대입하는 메커니즘입니다.

 

클래스 내부의 변수를 외부에서 접근할 수 있도록 public 접근자로 선언할 경우 의도치 않게 값이 변형되는 문제가 발생합니다.

 

이러한 문제를 방지하기 위해 프로퍼티라는 메커니즘을 사용하는 것이 좋습니다.

 

이번 포스팅은 프로퍼티의 개념과 간단한 예제코드를 정리합니다.


캡슐화

프로퍼티의 개념을 설명하기 앞서 "캡슐화"에 대한 기본적인 이해가 필요합니다.

 

- 캡슐화정보 은닉을 위해 클래스에서 선언된 변수가 외부에서 접근이 안되도록 public이 아닌 private로 선언하여 외부에서 접근을 불가능하게 합니다.

- 프로퍼티는 getset을 사용하여 private로 선언된 변수에 접근이 가능하도록 합니다.

 

정보 은닉을 위해서 public가 아닌 private로 선언을 했는데, getset으로 변수를 접근할 수 있으므로 별 차이가 없어보입니다.

 

그럼에도 불구하고 프로퍼티를 사용하는 이유는 변수의 값을 변경하거나 가져올 때, 조건을 걸어서 변수의 접근을 제어할 수 있기 때문입니다.


프로퍼티(Property)

class Person
{
  private string age; // field

  public string Age   // property
  {
    get { return age; }   // get method
    set { age = value; }  // set method
  }
}

변수 ageprivate로 선언이 되어있으므로 외부에서 접근을 불가능하지만, Age라는 프로퍼티로 접근 가능합니다.

 

프로퍼티는 필드와 동일한 이름으로 하되 첫 글자는 대문자로 사용하는 것이 일반적입니다.

 

get 접근자는 필드 값을 반환합니다.

set 접근자는 필드 값을 대입합니다.

 

프로퍼티(Property)의 3가지 유형

유형 설명
읽기-쓰기 전용 get및 set접근자를 모두 포함하는 속성입니다.
읽기 전용 get 접근자만 존재하는 속성입니다.
쓰기 전용 set 접근자만 존재하는 속성입니다.

get 접근자가 없는데, get 접근자를 호출하거나

set 접근자가 없는데, set 접근자를 호출하는 경우 컴파일 에러가 발생합니다. 

 

프로퍼티(Property) 예제 코드

class Person
{
  private string age; // field
  public string Age   // property
  {
    get { return age; }
    set { age = value; }
  }
}

class Program
{
  static void Main(string[] args)
  {
    Person personObj = new Person();
    Console.WriteLine("personObj.Age 값 설정 전 : " + personObj.Age);
    personObj.Age = "29";
    Console.WriteLine("personObj.Age 값 설정 후 : " + personObj.Age);
  }
}

실행 결과

반응형

set 접근 제어 예제 코드

class Person
{
  private string age; // field
  public string Age   // property
  {
    get { return age; }
    set { 
      if(value == "29") {
        age = "";
      } else { 
        age = value;
      }
    }
  }
}

class Program
{
  static void Main(string[] args)
  {
    Person personObj = new Person();
    Console.WriteLine("personObj.Age 값 설정 전 : " + personObj.Age);
    personObj.Age = "29";
    Console.WriteLine("personObj.Age 값 설정 후 : " + personObj.Age);
  }
}

실행 결과

set 접근자를 사용하여 age 필드의 값을 "29"로 대입합니다.

 

하지만, set 접근자의 조건문에 의해 "29"로 대입할 경우 빈 값("")으로 설정합니다.

 

위 코드처럼 값의 변경을 제어할 수 있습니다.


get 접근 제어 예제 코드

class Person
{
  private string age; // field
  public string Age   // property
  {
    get 
    { 
      if(age == "29") { 
        return "접근불가";
      } else {
        return age;
      } 
    }
    set { age = value; }
  }
}

class Program
{
  static void Main(string[] args)
  {
    Person personObj = new Person();
    Console.WriteLine("personObj.Age 값 설정 전 : " + personObj.Age);
    personObj.Age = "29";
    Console.WriteLine("personObj.Age 값 설정 후 : " + personObj.Age);
  }
}

실행 결과

age 필드의 값이 "29"일 경우 get 접근자를 사용하여 값을 읽을 수 없도록 조건문을 작성한 코드입니다.

 

위 코드처럼 필드의 값을 확인할 수 없도록 get 접근자에 조건문을 추가할 수 있습니다.

반응형

'C#' 카테고리의 다른 글

[C#]Call By Value, Call By Reference  (0) 2021.05.16
[C#]값 형식(Value Types)과 참조 형식(Reference Types)  (3) 2021.05.15
[C#]물음표(?) 사용  (2) 2021.05.13
[C#]Nullable 타입  (3) 2021.05.13
[C#]자동 구현 프로퍼티(Auto Property)  (0) 2021.05.08

댓글