유니티에서 씬에 사용될 게임 오브젝트를 C# 스크립트 파일로 생성해보면, MonoBehaviour이라는 클래스를 상속받은 채로 클래스가 생성되어 있는 것을 볼 수 있다.

 

이러한 MonoBehaviour 클래스는 왜 존재하는 것이며 왜 상속받고 있는 것일까?

 

MonoBehaviour

유니티 Docs에 따르면, MonoBehaviour클래스의 가장 큰 역할은 에디터와 스크립트 파일을 연결해주는 것이다.

 

C#으로 작성된 클래스를 에디터에서 읽고, 뷰포트에 띄우고, 컴포넌트를 추가하는 등의 작업을 하기 위해선 해당 클래스에 대한 정보를 에디터가 알아야 할 필요가 있는데, 이를 도와주는 것이 MonoBehaviour 클래스인 것이다.

 

즉, 에디터에서 해당 클래스를 어떤 방식으로든 이용하고 싶다면 MonoBehaviour 클래스를 상속받는 것은 선택이 아닌 필수인 것이다.

 

MonoBehaviour의 역할은 물론 그것 하나 뿐만은 아니다. 아래의 사진을 보자.

해당 사진은 유니티에서 제공하는 유니티 엔진 스크립트의 생명주기를 설명하는 사진이다. 유니티 엔진이 매 프레임 어떻게 동작하고 어떤 함수들을 어떤 순서대로 호출하는지를 보여주는 것이다.

 

우리가 작성한 클래스가 위의 생명주기에 맞춰서 동작하기 위해선 그냥 클래스를 냅다 만든다고 되는 것이 아니다. 유니티에서 제공하는 프레임워크를 벗어나서 마음대로 클래스를 만들게 되면, 이는 위의 생명주기를 벗어나 독자적으로 활동하게 된다. 그렇게 되면, 유니티 엔진에서 제공하는 다양한 기능을 활용할 수 없을 뿐더러 안정성도 해치는 일이 된다.

 

하지만, MonoBehaviour를 상속받게 되면 해당 클래스는 유니티 엔진 스크립트의 생명 주기와 결합이 된다. 위의 사진의 사이클 안에서 작동하게 되는 것이다. 즉, MonoBehaviour 클래스는 유니티 엔진의 프레임워크를 강제하는 역할도 하는 것이다.

 

MonoBehaviour 클래스를 상속받는다면 발생하는 이점이 이것 뿐만은 아니다. 위에서 말했던 것처럼 MonoBehaviour를 상속받게 되면, 유니티 엔진의 프레임워크를 강제받게 된다. 즉, 우리는 유니티 엔진에서 안내하는 방식으로 클래스를 설계하고 구성해야 한다는 것이다. 

 

이 것은 어떻게 보면 불편하고 제약적인 행동으로 보일 수도 있지만, 이를 통해서 우리는 엔진의 구체적인 기능을 이해하지 않아도 클래스를 설계할 수 있게 된다. MonoBehaviour로부터 제공받는 Start(), Update() 등의 함수가 엔진 내부에서 정확히 어떻게 동작하는 지를 이해할 필요 없이 어떠한 역할을 하는지만 이해한다면 우리의 의도대로 작동하는 클래스를 설계할 수 있게 된다. 즉, MonoBehaviour를 상속받고 유니티 엔진이 제공하는 프레임워크에 강제받게 됨으로써 우리는 엔진의 구체적인 작동방식을 이해하지 않아도 클래스를 설계할 수 있게 되는 것이다. 

 

정리해보자면 MonoBehaviour의 역할은 크게 3가지로 볼 수 있다.

 

1. C#으로 작성된 클래스와 에디터를 연결해준다.

2. 사용자에게 유니티 엔진의 프레임워크를 강제한다.

3. 엔진을 구체적으로 이해하지 못해도 사용할 수 있도록 도와준다.

'유니티 > 엔진 기초' 카테고리의 다른 글

유니티 기초 - 스크립팅 백엔드 (Mono, il2cpp)  (1) 2024.08.24

+ Recent posts