박싱 언박싱
C#은 값 형식(Value Type)과 참조 형식(Reference Type)이 명확히 구분되어있는 언어이다. 때문에 박싱과 언박싱은 중요한 개념이다.
박싱(Boxing)
박싱은 값 형식을 참조 형식으로 변환하는 과정
주로 object 형식에 값을 할당할 때 발생한다.
int number = 123;
object boxed = number; // 박싱
메모리 힙(Heap)에 값이 복사되고 참조로 접근할 수 있게 됨.
오버헤드가 발생할 수 있으므로 주의해야함.
언박싱(Unboxing)
언박싱은 참조 형식을 다시 값 형식으로 변환하는 과정이다.
object boxed = 123;
int number = (int)boxed; // 언박싱
언박싱 시에는 명시적 형변환(Casting)이 필요하다.
잘못된 형변환 시 InvalidCastException이 발생하므로 형변환은 확신할 수 있을 때 사용
박싱과 언박싱은 불필요한 메모리 할당과 해제를 유발하고 반복적인 연산에서는 성능 저하로 이어질 수 있다.
제네릭을 사용하면 박싱/언박싱을 피할 수 있다.
Unity의 MonoBehaviour
MonoBehaviour는 Unity에서 모든 스크립트 컴포넌트의 기본 클래스로
특정 메서드를 통해 객체의 생명주기를 제어가능하다.
특징
Unity 컴포넌트 시스템과 연결되어 있고 GameObject에 부착하여 동작
자동으로 호출되는 Unity의 라이프사이클 메서드가 있다.
Awake() 오브젝트가 활성화되기 전에 호출 초기화 로직에 주로 사용
Start() 첫 프레임 전에 한 번만 호출 초기 설정에 자주 사용
Update() 매 프레임마다 호출 실시간 처리나 입력 감지에 사용
FixedUpdate() 물리 연산용으로 일정 간격으로 호출 Rigidbody 제어에 주로 사용
OnDestroy() 오브젝트가 삭제되기 직전에 호출 주로 정리 작업에 사용
주의)
MonoBehaviour를 상속받은 클래스는 반드시 public 클래스여야 한다.
MonoBehaviour를 상속하지 않은 클래스는 Unity의 이벤트 메서드(ex)Start, Update)를 사용할 수 없다