포스트

[C#] 멤버 변수 접근 방식

[C#] 멤버 변수 접근 방식

C#에서 멤버 변수 접근 방식 비교

1. 주요 방식 개요

방식문법 예시설명대표 사용 상황
필드(field)public int hp;아무런 제어 없이 공개됨단순 POCO 모델, DTO
프로퍼티(property)public int HP { get; set; }캡슐화 + 자동 접근 제어 가능대부분의 C# 클래스
Get/Set 메서드public int GetHP() / SetHP()명시적 캡슐화, Java 스타일특별한 검증/로직 포함 시
람다식 프로퍼티public int HP => hp;읽기 전용 단축식내부 계산 기반, 읽기용
Expression-bodied 메서드public int GetHP() => hp;간단한 getter 메서드 표현lightweight getter
init-only 프로퍼티public int HP { get; init; }초기화 후 수정 불가Immutable 패턴

2. 방식별 설명

2.1 필드 (Field)

1
2
3
4
public class Enemy
{
    public int hp;
}
  • 외부에서 자유롭게 읽기/쓰기 가능
  • 캡슐화 없음 → 예외 상황 제한 불가

2.2 프로퍼티 (Property)

1
2
3
4
5
6
private int hp;
public int HP
{
    get => hp;
    set => hp = Math.Max(0, value); // 음수 방지
}

자동 구현 프로퍼티:

1
public int HP { get; set; }

2.3 Get/Set 메서드

1
2
3
4
5
6
private int hp;
public int GetHP() => hp;
public void SetHP(int value)
{
    hp = Math.Max(0, value);
}
  • Java 스타일 인터페이스
  • API처럼 동작시 명시적 처리 가능

2.4 람다식 (표현식 기반 프로퍼티)

1
2
private int hp;
public int HP => hp;

또는 계산 기반:

1
public int HealthPercent => hp / maxHp;

2.5 init-only 프로퍼티 (C# 9 이상)

1
public int MaxHP { get; init; }
  • 생성자나 객체 초기화 시점에만 설정 가능

2.6 접근자 제어자 조합

1
2
public int HP { get; private set; } // 외부는 읽기만, 내부는 쓰기 가능
public int HP { get; } = 100;       // 읽기 전용 프로퍼티

3. 용도별 추천

상황추천 방식
단순 데이터 전달, Unity 인스펙터 노출public field 또는 [SerializeField]
외부 접근 제한 + 내부 캡슐화property
내부 계산 기반 읽기 전용expression-bodied property
외부에서 초기값만 설정 가능하게init-only property
명확한 함수적 API로 처리하고 싶을 때Get/Set 메서드

4. 결론

  • 대부분의 경우에는 프로퍼티 (get; set;)를 사용하는 것이 C# 스타일에 가장 적합
  • Unity에서는 public field 또는 [SerializeField] + private 필드 + 프로퍼티 조합이 실무에서 가장 흔함
  • Get/Set 메서드는 구체적인 로직이나 의미 있는 네이밍이 필요한 경우에만 사용
  • 람다식 표현식은 읽기 전용, 계산 기반 속성에 적합
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.