[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)를 사용하여 더 간결하게 프로퍼티를 선언할 수 있습니다. 이 경우 컴파일러가 필드를 자동으로 생성하고, get
및 set
접근자도 자동으로 처리합니다.
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)
이렇게 프로퍼티를 사용하면 데이터를 보다 효과적으로 캡슐화하면서도 코드를 간결하게 유지할 수 있습니다.