자동으로 구현된 속성(C# 프로그래밍 가이드)
자동 구현 속성은 속성 접근자에 추가 논리가 필요하지 않은 경우 속성 선언을 더 간결하게 만듭니다. 이를 통해 클라이언트 코드에서 개체를 만들 수도 있습니다. 다음 예제와 같이 속성을 선언할 때 컴파일러는 속성의 get
및 set
접근자를 통해서만 액세스할 수 있는 전용 익명 지원 필드를 만듭니다. C# 9 이상에서는 init
접근자를 자동 구현 속성으로 선언할 수도 있습니다.
예제
다음 예제에서는 일부 자동 구현 속성이 있는 간단한 클래스를 보여 줍니다.
// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
// Auto-implemented properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerId { get; set; }
// Constructor
public Customer(double purchases, string name, int id)
{
TotalPurchases = purchases;
Name = name;
CustomerId = id;
}
// Methods
public string GetContactInfo() { return "ContactInfo"; }
public string GetTransactionHistory() { return "History"; }
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Initialize a new object.
Customer cust1 = new Customer(4987.63, "Northwind", 90108);
// Modify a property.
cust1.TotalPurchases += 499.99;
}
}
인터페이스에서는 자동 구현 속성을 선언할 수 없습니다. 자동 구현 속성은 private 인스턴스 지원 필드를 선언하는데, 인터페이스는 인스턴스 필드를 선언할 수 없기 때문입니다. 인터페이스에서 본문을 정의하지 않고 속성을 선언하면 해당 인터페이스를 구현하는 각 형식에 의해 구현되어야 하는 접근자와 함께 속성이 선언됩니다.
필드와 유사하게 자동 구현 속성을 초기화할 수 있습니다.
public string FirstName { get; set; } = "Jane";
앞의 예제에 표시된 클래스는 변경할 수 있습니다. 클라이언트 코드에서는 개체가 만들어진 후에 개체의 값을 변경할 수 있습니다. 데이터 및 중요 동작(메서드)을 포함하는 복잡한 클래스에는 public 속성이 필요한 경우가 많습니다. 그러나 값 세트(데이터)만 캡슐화하고 동작이 적거나 없는 작은 클래스나 구조체의 경우 다음 옵션 중 하나를 사용하여 개체를 변경할 수 없게 해야 합니다.
get
접근자만 선언합니다(생성자를 제외한 모든 위치에서 변경할 수 없음).get
접근자와init
접근자를 선언합니다(개체 생성 중을 제외하고 모든 위치에서 변경할 수 없음).set
접근자를 프라이빗으로 선언합니다(소비자가 변경할 수 없음).
자세한 내용은 자동으로 구현된 속성을 사용하여 간단한 클래스를 구현하는 방법을 참조하세요.