1. 개요
C#의 프로퍼티는 일반 필드처럼 값을 읽고 쓸 수 있지만, set 블록에서 추가 연산을 한 뒤 그 결과를 저장하려고 하면 구현 방식에 따라 제약이 생긴다. 자동 구현 프로퍼티의 경우 내부 백킹 필드에 직접 접근할 수 없기 때문에, hp = editedValue와 같은 대입이 불가능하다.
2. 예시: 일반 필드와의 차이
// 일반 필드 + 프로퍼티
private int hp;
public int Hp
{
    get => hp;
    set
    {
        int editedValue = Math.Max(0, value);
        hp = editedValue; // 가능
    }
}
// 자동 구현 프로퍼티
public int Hp { get; set; } = 100;
set
{
    int editedValue = Math.Max(0, value);
    hp = editedValue; // hp라는 이름의 필드가 없음. 컴파일 에러.
}자동 구현 프로퍼티는 컴파일러가 내부 백킹 필드를 자동 생성하지만, 이름이 숨겨져 있어 코드에서 직접 접근할 수 없다.
3. 설계 이유
자동 구현 프로퍼티는 간결한 문법으로 단순 저장 기능을 제공하기 위한 것이다. set 내부에서 로직이 필요하다면 자동성은 포기하고 명시적 백킹 필드를 사용해야 한다.
4. 대안
① 명시적 백킹 필드 작성
private int _hp = 100;
public int Hp
{
    get => _hp;
    set => _hp = Math.Max(0, value);
}② 자동 프로퍼티 + private set + 메서드
public int Hp { get; private set; } = 100;
public void SetHp(int value)
{
    Hp = Math.Max(0, value);
}③ C# 13 이상: field 키워드
public int Hp
{
    get;
    set => field = Math.Max(0, value);
} = 100;④ 유니티: [SerializeField] + 프로퍼티
[SerializeField] private int hp = 100;
public int Hp
{
    get => hp;
    set => hp = Mathf.Max(0, value);
}5. 요약
| 상황 | 추천 방식 | 
|---|---|
| 단순 저장 | 자동 구현 프로퍼티 | 
| set로직 필요 | 명시적 백킹 필드 | 
| 최신 C# 버전 사용 | field키워드 | 
| 유니티 + 인스펙터 노출 | [SerializeField]+ 프로퍼티 | 
'프로그래밍 > Unity(C#)' 카테고리의 다른 글
| [Unity] 민감한 내용을 포함한 프로젝트의 깃허브 업로드 '.env' (0) | 2025.04.03 | 
|---|---|
| 유니티 VFX Mesh 의 인스펙터에서 Surface Options가 보이지 않는 문제 (0) | 2024.11.11 | 
| 유니티 vfx graph 에서 셰이더 그래프를 사용할 수 없는 문제 (1) | 2024.11.11 | 
| [UI Toolkit] 일반적으로 런타임 중 UXML(VisualTreeAsset)의 동적 생성은 불가능 (0) | 2024.08.17 | 
| UI Toolkit, Height 사이즈 조정이 안되는 문제 (0) | 2024.07.20 | 
