C#) 프로퍼티
프로퍼티(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; }) |
없음 |
댓글남기기