필드(Field)와 프로퍼티(Property)는 C# 클래스에서 객체의 상태를 저장하고 데이터에 접근하는 방법을 제공합니다. 두 개념은 서로 관련이 있지만, 사용 방법과 목적이 다릅니다.
1. 필드(Field)
- 필드는 클래스나 구조체 내부에 선언된 변수로, 객체의 상태를 직접적으로 저장하는 공간입니다.
- 필드는 주로 private으로 선언되어 직접 접근을 제한하며, 클래스 내부에서만 접근 가능합니다.
예시:
class Car {
// 필드 선언
private string model;
private int year;
}
특징:
- 필드는 클래스 내부의 변수로, 값을 직접 저장하고 관리합니다.
- 보통 접근 제어자(private)를 사용하여 외부에서 필드에 직접 접근하지 못하게 보호합니다.
- 필드를 직접적으로 외부에 노출하는 것은 캡슐화 원칙에 위배될 수 있어, 데이터 보호 측면에서 권장되지 않습니다.
2. 프로퍼티(Property)
- 프로퍼티는 필드에 간접적으로 접근할 수 있는 메커니즘입니다. 프로퍼티는 필드와 달리 getter와 setter라는 접근자를 통해 값을 읽거나 수정할 수 있습니다.
- 프로퍼티는 내부적으로 필드를 사용하며, 데이터에 대한 추가 로직을 넣을 수 있는 유연한 방법입니다.
예시:
class Car {
// private 필드
private string model;
// 프로퍼티 선언
public string Model {
get { return model; }
set { model = value; }
}
}
특징:
- 프로퍼티는 필드와 달리 getter와 setter를 사용하여 값을 읽고(get) 설정(set)할 수 있습니다.
- 프로퍼티는 필드를 보호하면서도 외부에서 안전하게 데이터에 접근할 수 있는 방법을 제공합니다.
- 프로퍼티에 유효성 검사나 변경 알림 같은 추가 로직을 포함할 수 있습니다.
3. 차이점 요약
구분 | 필드(Field) | 프로퍼티(Property) |
---|---|---|
역할 | 데이터를 직접 저장하는 변수 | 데이터를 간접적으로 제어하는 방법 (getter/setter) |
접근 방식 | 클래스 내에서 직접 접근 | 클래스 외부에서도 getter/setter를 통해 간접 접근 |
사용 용도 | 주로 private 로 선언, 외부에 노출되지 않음 |
public 으로 선언, 필드에 안전하게 접근하는 수단 제공 |
캡슐화 | 데이터 보호가 어렵고 외부 접근을 제한해야 함 | 데이터 보호와 유효성 검사를 지원, 캡슐화 원칙 준수 |
추가 기능 | 단순히 데이터를 저장 | getter/setter를 통해 유효성 검사, 로직 처리 가능 |
4. 예시 비교
필드만 사용할 경우:
class Person {
public string Name; // public 필드: 직접 노출, 데이터 보호 불가
}
class Program {
static void Main() {
Person person = new Person();
person.Name = "John"; // 직접 필드에 접근
Console.WriteLine(person.Name);
}
}
프로퍼티를 사용할 경우:
class Person {
private string name; // private 필드
// 프로퍼티: getter와 setter를 사용해 간접적으로 접근
public string Name {
get { return name; }
set {
if (!string.IsNullOrEmpty(value)) {
name = value; // 유효성 검사 포함 가능
}
}
}
}
class Program {
static void Main() {
Person person = new Person();
person.Name = "John"; // setter를 통해 필드에 값 설정
Console.WriteLine(person.Name); // getter를 통해 필드 값 읽기
}
}
5. 필드와 프로퍼티를 언제 사용하는가?
- 필드는 주로 클래스 내부에서만 사용하는 비공개 데이터를 저장하는 데 사용됩니다. 외부에서 직접적으로 접근할 필요가 없는 경우 private 필드로 선언하는 것이 일반적입니다.
- 프로퍼티는 필드에 안전하게 접근할 수 있도록 하는 수단입니다. 외부에서 필드에 접근해야 하는 경우, 필드 대신 프로퍼티를 사용하여 유효성 검사나 로직을 추가함으로써 데이터를 안전하게 처리할 수 있습니다.
결론:
- 필드는 클래스 내부에서 데이터를 저장하는 공간으로, 직접 값을 변경할 수 있습니다. 그러나 데이터 보호를 위해 필드를 private으로 선언하고, 외부에서 직접 접근하지 못하게 접근을 제한하는 것이 일반적입니다.
- 프로퍼티는 필드에 간접적으로 접근하는 수단으로, getter와 setter를 통해 필드의 값을 읽거나 변경할 수 있습니다. 프로퍼티는 유효성 검사나 로직을 추가할 수 있기 때문에, 일반적으로 public으로 선언하여 외부에서 안전하게 값을 설정하고 조회할 수 있습니다.
'2학년 2학기 > 윈도우즈 프로그래밍' 카테고리의 다른 글
클래스(2) - 메소드 / 연산자 오버로딩, 생성자, 인덱서, 프로퍼티 (0) | 2024.09.30 |
---|---|
클래스(1) - 클래스 선언, 생성, 필드, 메소드 (0) | 2024.09.30 |
표준 입출력 (0) | 2024.09.30 |
오버 플로우 검사문 (Checked) (0) | 2024.09.30 |
Break와 Continue (0) | 2024.09.30 |