유니티를 실행시키고 C# 스크립트를 만들면
using UnityEngine; 등등 자동으로 완성되어 있는 템플릿들이 있다.
그 중 눈에 띄는 것은 MonoBehavior 클래스의 상속과 그로 인한 Start, Update 함수들이다.
우리는 앞으로 유니티 엔진 안에서 전처리기나 상속받은 MonoBehavior 클래스에 구현된 함수나 문법을 사용하기 때문에 기존의 C# 문법과는 다르다고 생각해야 한다.
예를들어 해당 클래스를 상속받은 상태에서 new를 사용하여 객체를 생성 시 오류가 발생한다.
그래서 대체 MonoBehavior 클래스가 무엇인지를 알아보기 전에
유니티는 기본적으로 component 디자인 패턴을 사용한다는 사실을 알아야 한다.
하나의 update 함수 안에 모든 코드를 때려박는 것이 아니라, 각각의 코드를 component처럼 분리하여 이 기능을 원하는 객체에게 코드를 추가하는 방식으로 동작한다.
하지만 그냥 기존의 C# 파일을 만든다고 해서 게임 오브젝트에 다 코드를 붙일 수 있는 것은 아니다.
위에서 말했던 MonoBehavior 클래스를 상속받아줘야지만 파일을 컴포넌트로 인식해서 오브젝트에 붙여넣어줄 수 있다.
(게임 오브젝트는 hierarchy 창에 있는 객체, 컴포넌트는 inspector 창에 있는 기능들)
그렇다면 당연히 컴포넌트로 사용하지 않는다면 붙일 이유가 없다.
예를 들어 프로젝트의 전반적인 리소스를 관리하는 manager를 만들자고 하자.
우리가 만들고자 하는 manager는 자원을 관리하기 위한 것이지, 딱히 어떤 객체에 추가하고자 하는 기능(코드)이 아니기 때문에 굳이 MonoBehavior 클래스를 상속받을 필요가 없다.
그렇게 MonoBehavior 클래스를 지워주면 update와 start 함수가 남게 되는데,
MonoBehavior 클래스를 상속받지 않으면, 해당 함수는 자동으로 실행되지 않는다.
프로그램이 시작할 때 start 함수에서 매니저의 초기화 함수를 불러와야 하는데 실행되지 않으니, 유니티 엔진 안에서는 MonoBehavior 클래스를 사용할 수 밖에 없는것 같다.
아니면 그냥 하던대로 main 함수 안에 코드를 구현하고 싶은데, 유니티 엔진 안에서 프로그램을 실행하려면 main 함수는 사용하지 못한다.
그래서 우리가 manager를 사용하려면 MonoBehavior 클래스를 상속받은 상태에서
새롭게 빈 오브젝트를 생성하고, 안에 manager 스크립트 붙여서 실행하는 방식으로 manager를 관리한다.