어트리뷰트
클래스, 메서드, 필드, 속성, 매개변수 등에 추가 정보를 제공하기 위해 사용하는 **메타데이터(metadata)**입니다. 어트리뷰트는 코드의 동작을 변경하거나 특정 기능을 활성화하는 데 도움을 줍니다.
어트리뷰트의 기본 개념
- 정의: 어트리뷰트는 [ ] 안에 작성되며 클래스나 멤버 위에 적용됩니다.
- 용도:
- 코드 실행 중에 특정 동작을 수행하거나
- 컴파일러나 런타임 환경에 정보를 전달
[SerializeField]
Unity에서 사용되는 **C# 어트리뷰트(attribute)**로, 비공개(Private) 필드를 인스펙터(Inspector) 창에 노출시키는 데 사용됩니다.
기본 개념
Unity에서 필드를 인스펙터 창에 노출시키려면 보통 public으로 선언해야 하지만, 모든 필드를 public으로 만드는 것은 캡슐화(encapsulation) 원칙을 위배할 수 있습니다.
[SerializeField]를 사용하면 필드는 여전히 private으로 유지하면서도 인스펙터 창에서 값을 설정할 수 있게 만듭니다.
사용 방법
위 코드의 동작
- privateValue: private임에도 불구하고 인스펙터 창에 나타납니다.
- hiddenValue: private이며, [SerializeField]가 없으므로 인스펙터에 나타나지 않습니다.
- publicValue: public 필드는 기본적으로 인스펙터에 표시됩니다.
[SerializeField]가 필요한 이유
- 캡슐화 유지: 데이터를 외부 스크립트에서 조작하지 못하게 보호.
- 인스펙터 창 활용: 디자이너나 비개발자도 쉽게 값을 설정하거나 조정할 수 있음.
- 코드 가독성 개선: 필드 접근 수준을 유지하면서 Unity의 직렬화(serialization) 기능을 활용.
[SerializeField]의 특징
- 직렬화 가능한 데이터만 인스펙터 창에 표시됩니다. (예: int, float, string, Unity의 GameObject, Transform 등)
- 기본값은 Unity 에디터에서만 저장됩니다. 실행 도중 변경된 값은 실행이 끝나면 초기화됩니다.
- **배열(Array)**이나 **리스트(List)**에도 적용 가능합니다
주의 사항
- [SerializeField]는 private 필드에만 사용하는 것이 일반적입니다. public 필드는 기본적으로 직렬화되므로 굳이 사용할 필요가 없습니다.
- static 필드는 직렬화되지 않습니다.
- Unity에서 직렬화되지 않는 클래스(예: 사용자 정의 클래스)는 [System.Serializable] 어트리뷰트를 함께 사용해야 합니다.
'Unity Learn > 주니어 프로그래머' 카테고리의 다른 글
6단원 - 프로젝트 최적화 : FixedUpdate() (0) | 2024.11.26 |
---|---|
6단원 - 프로젝트 최적화 : 접근 제한자 (0) | 2024.11.26 |
5단원 - 사용자 인터페이스 : AddListner() (0) | 2024.11.25 |
5단원 - 사용자 인터페이스 : 프로젝트 최종 완성 (0) | 2024.11.24 |
5단원 - 사용자 인터페이스 : Button (0) | 2024.11.24 |