본문 바로가기
2학년 2학기/윈도우즈 프로그래밍

필드와 프로퍼티의 차이

by print_soo 2024. 9. 30.

필드(Field)프로퍼티(Property)는 C# 클래스에서 객체의 상태를 저장하고 데이터에 접근하는 방법을 제공합니다. 두 개념은 서로 관련이 있지만, 사용 방법목적이 다릅니다.

1. 필드(Field)

  • 필드는 클래스나 구조체 내부에 선언된 변수로, 객체의 상태를 직접적으로 저장하는 공간입니다.
  • 필드는 주로 private으로 선언되어 직접 접근을 제한하며, 클래스 내부에서만 접근 가능합니다.

예시:

class Car {
    // 필드 선언
    private string model;
    private int year;
}

특징:

  • 필드는 클래스 내부의 변수로, 값을 직접 저장하고 관리합니다.
  • 보통 접근 제어자(private)를 사용하여 외부에서 필드에 직접 접근하지 못하게 보호합니다.
  • 필드를 직접적으로 외부에 노출하는 것은 캡슐화 원칙에 위배될 수 있어, 데이터 보호 측면에서 권장되지 않습니다.

 

 

2. 프로퍼티(Property)

  • 프로퍼티는 필드에 간접적으로 접근할 수 있는 메커니즘입니다. 프로퍼티는 필드와 달리 gettersetter라는 접근자를 통해 값을 읽거나 수정할 수 있습니다.
  • 프로퍼티는 내부적으로 필드를 사용하며, 데이터에 대한 추가 로직을 넣을 수 있는 유연한 방법입니다.

예시:

class Car {
    // private 필드
    private string model;

    // 프로퍼티 선언
    public string Model {
        get { return model; }
        set { model = value; }
    }
}

특징:

  • 프로퍼티는 필드와 달리 gettersetter를 사용하여 값을 읽고(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으로 선언하고, 외부에서 직접 접근하지 못하게 접근을 제한하는 것이 일반적입니다.
  • 프로퍼티는 필드에 간접적으로 접근하는 수단으로, gettersetter를 통해 필드의 값을 읽거나 변경할 수 있습니다. 프로퍼티는 유효성 검사로직을 추가할 수 있기 때문에, 일반적으로 public으로 선언하여 외부에서 안전하게 값을 설정하고 조회할 수 있습니다.