[SerializeField]
Serialize는 직렬화 작업
직렬화 : 추상적 데이터를 전송가능한 형태로 바꾸는 것 역직렬화 : 추상적 데이터를 재조립 하는것
- Binary Data Save
SerializeField
- Inspector 에서 접근은 가능하지만, 외부 스크립트에서 접근이 불가능하게 하기 위한 방법
- private 변수를 inspector에서 접근 가능하게 해주는 기능
- 일반적으로 Inspector에서 자주 변경해야 하는 private 변수에 쓰인다.
c# 스크립트 | Inspector View |
---|---|
public 접근제한자와 다른점
public
- C#의 일부이며 클래스 밖의 다른 클래스 메소드에 접근할 수 있도록 공개적으로 선언 하는 것
- MonoBehaviour나 ScriptableObject에서 필드를
public
으로 선언하면 Unity가 그것을 직렬화하고 인스펙터에 표시 - 인스펙터에서만 편집 가능해야 하는 필드를
public
으로 선언하는 것은 객체 지향 프로그래밍에서 권장되지 않음 - 필드가 코드의 어느 부분에서든 변경될 수 있게 되어 설계 문제를 일으키고 코드 유지 관리를 어렵게 만들기 때문
[SerializeField]
- Unity 특정 속성으로, private 필드 선언 위에 위치시킬 수 있음
- Unity에게 private 필드를 직렬화하고 인스펙터에서 노출하도록 지시하면서도 다른 클래스에서는 접근할 수 없게 함
- 인스펙터에서 값 설정은 가능하지만 여전히 클래스 내부에서만 접근할 수 있는 private 필드의 캡슐화 이점을 유지
- 인스펙터에 변수를 노출하고 싶지만 다른 클래스에서 접근할 필요가 없을 때 권장되는 방법
public class Example : MonoBehaviour
{
public int myPublicInt; // 어디서든 접근 가능하고 인스펙터에서 보임.
[SerializeField]
private int myPrivateInt; // 이 클래스 내에서만 접근 가능하지만 여전히 인스펙터에서 보임.
}