[Unity] MonoBehaviour와 new

spixychz·2026년 3월 18일

Unity

목록 보기
13/15

오늘의 질문

Unity에서 MonoBehaviour를 상속받은 클래스를 new 키워드로 생성하면 안되는 이유는 무엇인가요?


오늘의 대답

MonoBehaviour는 단순한 C# 객체가 아니라 Unity 엔진의 네이티브 코어와 연결된 컴포넌트이기 때문입니다.
new로 생성하면 엔진이 관리하는 생명주기(Lifecycle) 리스트에 등록되지 않아 Start, Update 같은 메시지를 받을 수 없으며, 물리나 렌더링 같은 엔진의 핵심 기능과 연결되지 않은 '껍데기' 객체가 됩니다.
따라서 반드시 AddComponentInstantiate를 통해 생성해야 합니다.


Native-Managed Bridge

엔진 코어와의 연결 고리

  • 하이브리드 구조
    • Unity는 성능을 위한 C++(Native) 코어와 개발 편의를 위한 C#(Managed) 스크립트가 결합된 구조입니다.
  • Wrapper 객체
    • MonoBehaviour는 C++ 영역의 실체와 연결된 일종의 Wrapper
  • 연결 단절
    • new 사용 시 C# 메모리만 할당되고 C++ 엔진 데이터와 연결되지 않음
      => transform, gameObject 등 내장 프로퍼티 접근 시 NullReferenceException이 발생합니다.
      => 코루틴이나 물리 처리도 불가능
  • Life Cycle
    • Unity 엔진은 매 프레임 활성화된 컴포넌트 리스트를 순회하며 메세지 전송
      => Start, Update
  • 직렬화
    • Unity 에디터는 객체의 상태를 저장하고 복구하기 위해 직렬화를 수행
      => new 객체는 직렬화 워크플로우에서 추적 불가

생성 가이드

  • 기존 객체에 기능 추가 => AddComponent
  • 새로운 오브젝트 생성 => Instantiate
  • 순수 로직 or 데이터 관리 => MonoBehaviour 상속을 제거하고 new
  • 에셋 형태의 데이터 저장 => ScriptableObject

결론

=> MonoBehaviour는 엔진이 관리하는 부품
부품(MonoBehaviour)은 규격화된 공정(AddComponent / Instantiate)을 거쳐야만 전력(LifeCycle / Physics)을 공급받을 수 있다

profile
UNITY로 게임 개발하는 사람

0개의 댓글