|

[C#] get , set 문법과 자동 구현 프로퍼티

C#에서 **get**과 set 문법은 프로퍼티를 정의하는 데 사용됩니다. 프로퍼티는 필드(클래스의 변수)의 값을 읽고 쓰는 방식을 제어하는 메커니즘으로, 메서드처럼 작동하지만 외부 코드에서는 필드처럼 보입니다. 프로퍼티를 사용하면 데이터의 캡슐화와 유효성 검사, 로깅, 오류 검사 등을 구현할 수 있으며, 이를 통해 객체의 상태 관리가 더욱 안전하고 유연해집니다.

프로퍼티의 구성

  • get 접근자: 프로퍼티의 값을 반환합니다. 읽기 전용 프로퍼티의 경우 get 접근자만을 제공합니다.
  • set 접근자: 프로퍼티에 값을 할당합니다. set 접근자 내에서는 **value**라는 특별한 키워드를 사용하여 할당된 값을 참조할 수 있습니다. 쓰기 전용 프로퍼티의 경우 set 접근자만을 제공할 수 있습니다.

예제 1: 간단한 get/set 프로퍼티

csharpCopy code
public class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

public class Program
{
    public static void Main()
    {
        Person person = new Person();
        person.Name = "John Doe";  // set 접근자 호출
        Console.WriteLine(person.Name);  // get 접근자 호출
    }
}

Code language: C# (cs)

이 예제에서 Person 클래스는 **Name**이라는 프로퍼티를 가지며, 이 프로퍼티는 내부 필드 **name**의 값을 반환하고 설정합니다.

예제 2: 유효성 검사를 포함한 get/set 프로퍼티

csharpCopy code
public class Employee
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value < 0)
                throw new ArgumentException("Age cannot be negative.");
            age = value;
        }
    }
}

public class Program
{
    public static void Main()
    {
        Employee employee = new Employee();
        try
        {
            employee.Age = 30;  // 유효한 나이 설정
            Console.WriteLine(employee.Age);  // 나이 읽기
            employee.Age = -5;  // 예외 발생
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

Code language: C# (cs)

이 예제에서 Employee 클래스는 Age 프로퍼티를 가지고 있으며, 이 프로퍼티는 나이를 설정할 때 유효성 검사를 수행합니다. 나이가 음수로 설정될 경우 **ArgumentException**을 발생시킵니다.

프로퍼티의 고급 사용

C#에서는 자동 구현 프로퍼티(Auto-Implemented Properties)를 사용하여 더 간결하게 프로퍼티를 선언할 수 있습니다. 이 경우 컴파일러가 필드를 자동으로 생성하고, getset 접근자도 자동으로 처리합니다.

csharpCopy code
public class Product
{
    public string Name { get; set; }  // 자동 구현 프로퍼티
}

public class Program
{
    public static void Main()
    {
        Product product = new Product();
        product.Name = "Coffee";  // 자동 구현 set 접근자 사용
        Console.WriteLine(product.Name);  // 자동 구현 get 접근자 사용
    }
}

Code language: PHP (php)

이렇게 프로퍼티를 사용하면 데이터를 보다 효과적으로 캡슐화하면서도 코드를 간결하게 유지할 수 있습니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다