본문 바로가기
Unity

게임 엔진의 원리: 게임 오브젝트와 컴포넌트

by imagineer_jinny 2021. 6. 9.

상속으로 개발의 생산성을 올린다.

그러나 상속이 늘 좋을까? 놉!

 

자식은 부모의 빚까지 상속해야한다. 선택적으로 상속받을 수 없다.

상속으로 오히려 코드를 재사용하기 힘든 경우가 나타날 수 있다. 

그 근본적인 이유는, 미래에 사용될 '최소 필수집합'을 미리 예상하는 것이 힘들다는 것!

다시 말하면 완벽하게 순수한 베이스 클래스를 만드는 것은 어렵다는 것.

+ 기획자가 프로그래머에게 의존하게 되는 문제

 

이 방식을 해결할 수 있는 방법은 상속이 아니라 가지고 있는 것.

A는 필요한 기능이 있을 때마다 그 기능을 가진 오브젝트를 자기 내부에 포함시킴. 상속이 아니라!

즉, 선택적으로 기능을 골라 붙임.

비어있는 컨테이너를 만들어놓고 그 컨테이너에 기능들을 선택해서 붙이는 것.

: 게임 오브젝트- 컴포넌트 방식

 

게임 오브젝트:

1) 단순 홀더(Holder), 빈 껍데기

2) 게임 속에 존재하는 사물을 가리키는 단위

 

컴포넌트:

1) 미리 만들어진 부품

2) 각자 대표 기능을 가짐

 

컴포넌트의 장점:

미리 만들어진 컴포넌트를 게임 오브젝트에 조립하는 방식

 

1) 유연한 재사용

상속을 사용했을 때는 부모 클래스의 불필요한 기능까지도 자식 클래스가 가져가서 코드 재사용이 힘듦.

하지만 컴포넌트 방식에서는 원하는 기능만 선택적으로 가져갈 수 있음.

 

2) 기획자의 프로그래머 의존도가 낮아짐

필요한 기능을 조립해서 프로그래밍을 할 수 있기 때문에 

 

3) 독립성 덕분에 추가와 삭제가 쉽다

어떤 기능을 추가, 삭제할 때 그 기능과 관련된 기능이 망가지는 경우가 생기는데, 

컴포넌트는 독립성이 강해서 연관된 기능이 망가질 걱정을 덜 하게 된다.

 

컴포넌트는 스스로 동작하는 독립부품

그래서 자신의 게임오브젝트에 추가된 다른 컴포넌트에 관심이 없음

즉 컴포넌트 기능은 컴포넌트 내부에서 완성되어있음

그래서 컴포넌트는 다른 컴포넌트에 의존할 필요가 없어서 

어떤 컴포넌트를 기존 컴포넌트에 새로 추가하거나 삭제했을 때 다른 컴포넌트가 망가지지 않음.

 

컴포넌트가 독립적이라면,

누가 컴포넌트의 기능을 실행시킬까?

 

컴포넌트는 자신만의 핵심기능 이외에도 

컴포넌트 스스로에 시동을 거는 Start와 

1초에 수십번 씩 자신의 상태를 갱신하고 주기적으로 시행해야 할 걸 시행하는 Update 기능이 있음.

 

외부의 간섭을 받지 않는 부품이 어떻게 스스로를 동작시킬까?

 

 

출처: 레트로의 유니티 C# 게임 프로그래밍 에센스 강의

댓글