
유니티에서 MonoBehaviour를 상속받는 클래스들은 인스펙터에서 부착이 가능하다.
지금까지 유니티로 여러 게임들을 만들어왔지만 MonoBehaviour는 단지 컴포넌트 방식을 위해서만 존재한다고 알아왔다. 하지만 깊은 이해를 위해 이를 알아보려고 한다.

컴포넌트(Component)란 프로그래밍에 있어 재사용 및 교체가 가능한 부품을 말한다. 컴포넌트 기반 아키텍처는 유지보수와 확장성을 향상시킨다.
컴포넌트는 OOP와 매우 밀접한 관계가 있다고 느껴지지만, 컴포넌트는 이 글의 주제에서 벗어나므로 이는 다음에 정리하도록 하겠다.
어쨌거나 유니티에서의 컴포넌트는 모든 게임 오브젝트의 작동과 관련된다. 즉, Component 클래스는 게임 오브젝트에 부착되는 모든 클래스의 조상이다.
Component 클래스를 이해하기 위해 매우 간단하게 요약한 Component 클래스의 선언을 살펴보자.
public class Component : Object
{
public Transform transform { get => ... }
public GameObject gameObject { get => ...}
public string tag
{
get => ...;
set => ...
}
public Component GetComponent(Type type);
...
}
Component 클래스는 트랜스폼, 게임 오브젝트, 태그 속성을 가지며 컴포넌트와 관련된 메서드를 제공한다.
유니티에서 C# 스크립트를 작성할 때 Component를 상속받으면 인스펙터에서 이 스크립트를 부착할 수 있을지 궁금해서 확인을 해봤다.
using UnityEngine;
public class ComponentTest : Component {}

결과는 불가능했다. 왜 MonoBehaviour가 있어야만 부착 수 있게 되는지 알아본 결과 MonoBehaviour는 C++ 엔진 레벨에서 Attachable Script로 정의되어 있지만 Component는 그렇지 않았다.
Behavior 클래스는 Component와 MonoBehaviour 사이에 존재하는 추상적인 클래스다.
Behaviour 클래스는 enabled와 IsActiveAndEnabled 속성을 지니며 각각은 다음과 같다.
| 속성 | 설명 |
|---|---|
| enabled | 게임 오브젝트가 업데이트 될 지의 여부를 확인/결정한다. |
| IsActiveAndEnabled | 게임 오브젝트가 활성화되어 있고 업데이트되고 있는지의 여부를 확인한다. |
Behaviour 클래스 상속하는 클래스도 마찬가지로, 인스펙터에서 부착이 불가능하다.
MonoBehaviour 클래스는 인스펙터에서 컴포넌트를 부착하기 위한 클래스며, 유니티 엔진이 제공하는 다양한 기능과 이벤트 함수를 제공한다.
MonoBehaviour 클래스 내부에는 Invoke()와 코루틴에 관한 메서드들이 정의되어 있으며, MonoBehaviour 클래스는 Behaviour과 Component을 상속하므로 이들의 모든 속성과 메서드들도 지닌다.
MonoBehaviour는 이벤트 함수도 제공하며 이들은 여기 글을 참고하면 될 것 같다.