Field와 Property

Posted by Eun JongHyeok on December 09, 2022
  1. Field와 Property
  2. 필드란
  3. 프로퍼티란
  4. 참고

Field와 Property

사실 이 글을 작성하게된 계기는 FieldProperty가 제대로 이해되지도 않은체 혼용되어 사용하는게 불쾌하고 사용할 때마다 고민하는게 골치라 이번 기회에 깔끔하게 정리해보고자 합니다.

우선 Property는 한국어로 속성이라고 번역이되던데 제가 알던 속성이랑 의미가 와닿지 않아 프로퍼티로 칭하겠습니다. 글 자체는 프로퍼티에 초점이 맞춰져 있고 .Net C# 문서와 저의 지식들을 요약한 내용입니다.

필드란

필드에 대해 먼저 빠르게 정리해 봅니다. 필드는 클래스나 구조체에서 직접 선언되는 모든 타입의 변수 입니다. 처음 배울때는 멤버 변수, 데이터 멤버라 불렀던거 같습니다.

일반적으로 필드는 private이나 protected와 같은 접근제한이 있는 변수로 사용해야 합니다. 이는 외부(클라이언트 코드)에서 필드를 원하지 않은 입력방식에 의해 바뀌는 것을 막기 위함입니다. 그래서 프로퍼티가 없는 언어의 경우 메서드를 이용하여 getter, setter 함수를 만들어 주었습니다. 그리고 C#의 경우 메소드 뿐만 아니라 프로퍼티와 인덱서를 통해 데이터를 노출시켜줍니다. public 프로퍼티로 노출하는 private 필드를 백업 필드, 백업 스토어라 부릅니다.

필드는 두개 이상의 메소드에서 이용하고 단일 메소드의 수명보다 오래 지속되야 하는 데이터를 저장하는데 사용되어야 합니다. 그렇지 않을 경우에는 지역 변수를 사용하는게 낫습니다.

이러한 필드에 다양한 한정자가 붙어 사용될 수 있지만 필드에 대해서는 여기까지 정리하겠습니다.

프로퍼티란

프로퍼티는 private 필드의 값을 읽고 쓰고 계산하는 유연한 메커니즘을 제공하는 멤버입니다. 또한 프로퍼티는 public 데이터 멤버처럼 사용될 수 있지만 이때 Accessor라 불리는 특별한 메서드(get)를 사용합니다. 이러한 기능은 데이터를 쉽게 접근할 수 있게 하면서 메서드의 안전성과 유연성을 높이는데 도움을 줍니다.

쉽게 말하면 기존 private 필드에 getter, setter 메소드를 따로 만드는 번거로운 작업을 간단하게 바꿔주고 기존 메소드와도 다른 성격의 멤버로 만들어 준 것입니다. 실제 컴파일 단계에서는 메소드로 변환이 됩니다. 즉 언어차원에서 제공하는 캡슐화의 일종입니다.

필드와 프로퍼티의 기본 형태는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Animanl
{
    // 필드, 백업 필드
    private string _name;

    // 프로퍼티
    public string Name
    {
        // Accessor
        get { return _name; }
        // Mutator
        set { _name = value; }
    }
}

필드와 프로퍼티에 대한 정의는 얼추 설명한거 같으니 다음 포스팅에서는 프로퍼티의 사용법으로 넘어가도록 하겠습니다. 용어에 대한 내용이라 두서없이 글로만 적다보니 보는 분들의 입장에서는 오히려 이해가 안갈까 걱정이 되네요.

참고

Field 문서
Property 문서


field
property

← Previous Post Next Post