오늘은 객체지향이란 무엇인가와 유니티 생명주기에 대해 공부해보겠다.
면접에서도 많이 나오는 질문이기도 하고 개념을 한 번더 집고 가면 좋을 것 같다.
객체지향이란?
취업 사이트를 보다가 객체지향 프로그래밍에 대해 이해하고 계시는 분 이라는 자격요건을 본 적이 있는 것 같다.
객체지향 프로그래밍은 Object Oriented Programming로 프로그래밍에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들을 조립하여 하나의 결과물을 만드는 프로그래밍 방법이다.
객체지향은 프로그래밍의 장점으로는
재사용성, 유지보수 용이, 가독성, 모듈화를 통한 대형 프로젝트에 적합으로 볼 수 있을 것 같다.
단점으로는
처리 속도가 절차지향에 비해 상대적으로 느리고,
설계하는 단계에서 많은 시간과 노력이 필요하다.
그러면 이제 객체가 무엇인지 알아보자.
객체를 알기전 먼저 클래스에 대해 알 필요가 있다.
클래스는 크게 변수와 메소드로 구성되어 있는데 이들은 객체를 만들기 위한 정보이고,
객체는 클래스에서 정의한 것을 토대로 실제 메모리에 할당된, 실제로 사용되는 데이터를 말한다.
객체지향 프로그래밍의 특징도 알아보자.
추상화 - 객체들이 공통적으로 필요로 하는 속성,동작을 두루뭉실하게 정의하는 방법이다.
상속 - 여러 객체들이 지닌 공통된 특성을 물려받아 코드의 중복을 막는 방법이다.
다형성 - 오버로딩, 오버라이딩을 통해 같은 자료형에 다양한 데이터를 대입하여 다양한 결과를 얻을 수 있는 성질을 말한다.
갭슐화 - 데이터와 메소드를 묶어 외부에서 접근하지 못하도록 보호하는 것을 말한다. 이는 외부로 부터 데이터가 변경되는 상황으로부터 보호할 수 있고, 안전한 부분은 노출시켜 구현의 폭을 넓힐수 있다.
객체지향은 여기까지 알아보도록 하겠다.
유니티 생명주기
유니티 생명주기를 알기 전에 먼저 알아야 할 것이 있다.
MonoBehavior이다.
이는 모든 유니티 스크립트가 상속받는 기본 클래스이다.
MonoBehavior를 상속받아 유니티에서 제공하는 많은 템프릿스크립트를 사용할 수 있다.
이제 유니티 생명주기에 대해 알아보자.
MonoBehavior가 씬에서 살아 갈 때 생성되고 파괴될 때까지의 순서를 이벤트 함수들로 지정해 놓았고, 이 실행 순서를 생명주기라고 한다.
간략히 말하면 유니티에서 제공하는 이벤트 함수의 실행 순서라고 볼 수 있을 것 같다.
Monobehavior를 상속받지 않는 스크립트는 물론 이 생명주기에 포함되지 않는다.
유니티에서 제공하는 문서의 생명주기를 보자.
생각보다 굉장히 많은 이벤트 함수들이 존재하는데 여기서 자주 사용되는 몇 가지만 알아보겠다.
Awake: 씬이 시작될 때 호출되는 함수이다. 이 함수는 항상 Start함수 전에 호출되며, 프리팹이 인스턴스화 된 직후에 호출된다.
게임 오브제트가 비활성 상태인 경우 활성화 될 때 까지 호출되지 않는다. 가장 먼저 실행된다고 보면 될 것 같다.
OnEnable(오브젝트가 활성화된 경우에만): 오브젝트 활성화 직후 이 함수를 호출한다.
Start: 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출된다.
FixedUpdate: FixedUpdate는 종종 Update보다 더 자주 호출된다. 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있다. 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생한다. FixedUpdate의 움직임 계산을 적용할 때 Time.deltaTime만큼 값을 곱할 필요가 없다.
Update: Update 는 프레임당 한 번 호출된다.
LateUpdate: LateUpdate는 Update가 끝난 후 프레임당 한 번 호출되고, Update에서 수행된 모든 계산은 LateUpdate가 시작할 때 완료된다. LateUpdate는 일반적으로 다음의 3인칭 카메라에 사용되는데 캐릭터를 움직이고 Update로 방향을 바꾸게 하는 경우 LateUpdate에서 모든 카메라 움직임과 로테이션 계산을 수행할 수 있다. 이렇게 하면 카메라가 포지션을 추적하기 전에 캐릭터가 완전히 움직였는지 확인할 수 있다.
OnDestroy: 오브젝트가 파괴될 때 호출된다.
OnApplicationQuit: 이 함수는 애플리케이션 종료 전 모든 게임 오브젝트에서 호출된다. 에디터에서는 사용자가 플레이 모드를 중지할 때 호출된다.
OnDisable: 동작이 비활성화되거나 비활성 상태일 때 이 함수가 호출된다.
아직까지는 내가 사용하는 이벤트 함수는 이정도 인 것 같다.
참고: https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html