[면접대비] Unity(1)
기본 / 생명주기
Unity MonoBehaviour란 무엇인가요
Unity에서 스크립트를 GameObject의 컴포넌트로 사용할 수 있게 해주는 기본 클래스입니다. 이를 상속하면 Awake, Start, Update같은 Unity의 생명 주기 함수를 사용할 수 있습니다.
Awake, OnEnable, Start의 차이와 호출 순서를 설명해주세요
Awake는 객체가 로드될 때 초기화 용도로 호출되고, OnEnable은 객체가 활성화될 때마다 호출됩니다. Start는 첫 번째 프레임 업데이트 전에 한 번 호출되며 일반적으로 Awake → OnEnable → Start 순서입니다
Update, FixedUpdate, LateUpdate의 차이는 무엇인가요
Update는 매 프레임 호출되어 입력이나 일반 로직에 사용하고, FixedUpdate는 고정된 시간 간격으로 호출되어 물리 처리에 사용합니다. LateUpdate는 Update이후 호출되어 카메라 추적처럼 다른 객체의 처리가 끝난 뒤 실행할 로직에 사용합니다.
OnDisable, OnDestroy는 언제 호출되나요
OnDisable은 GameObject나 컴포넌트가 비활성화될 때 호출되고 다시 활성화되면 또 호출될 수 있습니다.
OnDestroy는 해당 객체가 파괴될 때 호출됩니다
유니티의 전체적인 생명 주기에 대해 설명해주세요
객체가 생성되면 Awake → OnEnable → Start가 호출되고 이후 FixedUpdate → Update → LateUpdate 등의 업데이트 과정이 반복됩니다. 비활성화되면 OnDisable, 파괴되면 OnDestroy가 호출됩니다
Time.deltaTime은 무엇이며 왜 사용하나요
Time.deltaTime은 이전 프레임부터 현재 프레임까지 걸린 시간입니다. 이동이나 시간 기반 로직에 곱해서 프레임 속도와 관계없이 일정하게 동작하도록 사용합니다.
Time.timeScale은 무엇인가요
Time.timeScale은 Unity에서 게임 시간이 흐르는 속도를 조절하는 값입니다. 기본값은 1이고 0으로 설정하면 deltaTime 기반 게임 로직이나 물리 처리를 정지시킬 수 있습니다.
GameObject와 Component의 관계를 설명해주세요
GameObject는 Unity Scene에 존재하는 객체의 기본단위입니다. 실제 기능은 Transform, Rigidbody, 사용자 스크립트 같은 Componenet를 붙여 구성합니다
Transform은 무엇이며 모든 GameObject에 존재하는 이유는 무엇인가요
Transform은 GameObject의 위치, 회전, 크기와 부모-자식 계층 구조를 관리하는 컴포넌트입니다. 모든 GameObject는 Scene에서 공간적 정보와 계층 관계를 가져야 하기 때문에 기본적으로 포함됩니다
SetActive(false)와 enabled = false의 차이는 무엇인가요
SetActive(false)는 GameObject 자체를 비활성화해서 자식과 붙어 있는 컴포넌트의 동작까지 비활성화합니다. 반면 enabled = false는 해당 컴포넌트만 비활성화합니다.
GameObject / Prefab / Scene
Prefab이란 무엇인가요
Prefab은 GameObject와 그 컴포넌트 설정을 재사용 가능한 에셋 형태로 저장한 템플릿입니다. 같은 구조의 객체를 여러 번 생성하거나 일관되게 관리할 때 사용합니다
Prefab과 Prefab Instance의 차이는 무엇인가요
Prefab은 Project에 저장되어 있는 원본 에셋이고, Prefab Instance는 해당 Prefab을 기반으로 Scene에 생성된 객체입니다
Prefab Variant란 무엇인가요
기존 Prefab을 상속받아 일부 속성이나 컴포넌트만 변경한 Prefab입니다. 공통 구조는 유지하면서 여러 종류의 객체를 만들 때 유용합니다
Instantiate와 Destroy를 자주 호출하면 어떤 문제가 생길 수 있나요
반복적인 생성과 제거는 메모리 할당 및 해제와 초기화 비용을 발생시키고 GC로 인한 프레임 드랍으로 이어질 수 있습니다
Object Pooling을 Unity에서 사용하는 이유는 무엇인가요
총알이나 몬스터처럼 반복적으로 생성하고 제거하는 객체를 미리 생성해두고 재사용하여 Instantiate와 Destroy호출을 줄이는 기법입니다. 이를 통해 생성 비용과 메모리 할당을 줄일 수 있습니다
Scene을 전환하는 방법을 설명해주세요
SceneManager.LoadScene()을 사용해서 다른 Scene을 로드할 수 있습니다. 로딩 시간이 긴 경우에는 LoadSceneAsync()를 사용해 비동기 로드할 수도 있습니다
LoadScene과 LoadSceneAsync의 차이는 무엇인가요
LoadScene은 Scene 로딩이 완료될 때까지 메인 스레드의 작업을 막을 수 있지만, LoadSceneAsync는 로딩 작업을 여러 프레임에 걸쳐 진행할 수 있어 로딩 화면이나 UI를 계속 갱신할 수 있습니다
DontDestroyOnLoad는 어떻게 동작하나요
DontDestroyOnLoad를 적용한 GameObject는 Scene이 전환되어도 제거되지 않고 유지됩니다. 게임 매니저, 오디오 매니저처럼 여러 Scene에서 계속 사용해야하는 객체에 주로 사용됩니다


![[Unity] PC 세이브 데이터 Android로 옮기기](https://data.develog.develrocket.com/upload/develog/muchan/1792206352286-hd4xz4/_____2026-10-17_114953.png)
![[Unity] 제네릭 박싱 예방](https://data.develog.develrocket.com/upload/develog/gmumdev/1792123312021-bhxx2i/_____.png)