프로퍼티(Property)

필드(변수)와 메서드의 중간 역할을 하며, 데이터를 보호하면서도 직관적인 방식으로 접근할 수 있도록 도와주는 기능이다.

getter와 setter를 포함한 특수한 메서드로, 필드(변수)에 대한 읽기/쓰기 접근을 제어하는 역할을 한다.

프로퍼티가 필요한 이유

직접 필드 접근보다 안전성 제공

class Person
{
    private string name; // private 필드

    public string Name  // 프로퍼티
    {
        get { return name; }
        set { name = value; }
    }
}
  • 필드를 private으로 감싸고, get/set을 통해 값 접근을 제한하여 캡슐화를 구현한다.
  • 외부에서 직접 name을 변경할 수 없고, Name 프로퍼티를 통해서만 접근 가능하다.

값을 제어할 수 있는 기능 제공

필드에 값을 넣을 때, 유효성 검사를 추가할 수 있다.

class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value < 0) 
                throw new ArgumentException("나이는 0보다 작을 수 없다.");
            age = value;
        }
    }
}

class Program
{
    static void Main()
    {
        Person p = new Person();
        p.Age = -5; // 예외 발생: "나이는 0보다 작을 수 없다."
    }
}
  • Age 프로퍼티의 set에서 유효성 검사를 추가하여 잘못된 데이터 입력을 방지할 수 있다.

읽기 전용 또는 쓰기 전용 필드 가능

// 읽기 전용
class Person
{
    private string name = "John Doe";

    public string Name
    {
        get { return name; }  // get만 제공 (읽기 전용)
    }
}
// 쓰기 전용
class Person
{
    private string password;

    public string Password
    {
        set { password = value; }  // set만 제공 (쓰기 전용)
    }
}

자동 구현 프로퍼티 지원

C#에서는 자동 구현 프로퍼티를 사용하여 더 간결하게 표현할 수 있다.

class Person
{
    public string Name { get; set; }  // 자동으로 필드 관리
}

class Program
{
    static void Main()
    {
        Person p = new Person();
        p.Name = "Alice";  
        Console.WriteLine(p.Name);  // Alice 출력
    }
}

필드 vs 프로퍼티 vs 메서드

  필드(Field) 프로퍼티(Property) 메서드(Method)
정의 데이터를 저장하는 변수 데이터를 보호하며 제어하는 기능 데이터를 처리하는 로직
접근 방식 obj.name obj.Name obj.GetName() / obj.SetName(value)
데이터 보호 public이면 직접 수정 가능 private 필드로 보호 가능 가능하지만 문법이 길어짐
유효성 검사 불가능 set에서 가능 가능하지만 Set 메서드를 따로 만들어야 함
읽기 전용/쓰기 전용 불가능 가능 (get 또는 set만 사용) 가능하지만 별도 메서드 필요
자동 구현 지원 없음 있음 ({ get; set; }) 없음

태그: ,

카테고리:

업데이트:

댓글남기기