기록

[3.1] 상속과 재사용 본문

잡동사니/[2022] 회로이론

[3.1] 상속과 재사용

heylo 2022. 12. 17. 21:06

게임 엔진이미 완성된 기반 코드를 제공합니다.

개발자는 게임 엔진의 코드를 '재사용'하므로 생산성이 올라갑니다.

 

이러한 코드 재사용은 게임 개발 뿐만 아니라

대부분의 소프트웨어 개발에 있어 중요합니다.

 

유니티의 컴포넌트 기반 구조를 이해하려면

코드를 재사용하는 전통적 방법인

'상속'을 알야아 합니다.

 

상속은 이미 만들어진 클래스에

새로운 코드와 기능을 덧붙여

새로운 클래스를 만드는 방법입니다.

 

여기서 기초를 제공하는 클래스를 부모 클래스라고 부르고

부모 클래스를 상속해서 확장한 클래스를 자식 클래스라고 부릅니다.

 

 

 

 

클래스란 묘사할 대상과 관련된 코드 (변수와 메스드 등)을 묶는 틀입니다.

예를 들어 몬스터 클래스는 몬스터와 관련된 코드를 가지고

힐러 클래스는 힐러와 관련된 코드를 가집니다.

 

 


3.1.1 상속으로 몬스터 만들기

오크 (Orc) 와 오크 대장 (Orc Chieftan)을 만들기 위해

세 클래스가 다음 그림과 같은 상속 관계를 가지게 했습니다.

Pixabay에서 무료로 다운받은 이미지를 수정하였습니다.

 

그림에서 콜론 (:)

오른쪽의 부모 클래스를 상속해

왼쪽의 자식 클래스를 만든다는 의미입니다.

 

즉, Orc : Monster는

Monster 클래스를 기반으로 

Orc 클래스를 만드는 겁니다.

 

상속을 이용하면 미리 만들어진 코드를 확장하여

새로운 코드를 작성할 수 있습니다.

이것이 상속의 힘입니다.

하지만 상속이 만능은 아닙니다.

 


3.1.2 상속의 한계

부모 클래스를 상속해 자식 클래스의 기초 구현을 대신할 수 있습니다.

하지만 상속에만 의존하면 오히려 코드를 재사용하기 힘들 수 있습니다.

 

[과정 01] 최상위 부모 클래스인 사람 (Human) 클래스 구현

 

[과정 02] 플레이어 (Player) 클래스 구현

 

[과정 03] NPC 클래스 구현

NPC에 체력이 있으면 누군가 NPC를 공격해 죽여

플레이어가 게임을 더 이상 진행할 수 없는 문제가 생길 수 있습니다.

 

또한 NPC는 한 곳에 머무르며 플레이어와 상호작용하기 때문에

물리 기능이 필요 없습니다.

 

따라서 NPC를 만드는 동안 물리 기능과 체력 기능을 삭제했습니다.

즉, 상속으로 인해 오히려 추가 작업이 생겼습니다.

NPC에는 Human의 일부 기능이 필요 없기 때문입니다.

 

 

 

[과정 04] 몬스터 (Monster) 클래스 구현

Human의 애니메이션 기능은

사람의 뼈대를 기준으로 만들어졌습니다.

 

하지만 몬스터는 슬라임이나 드래곤처럼

사람과 다른 뼈대를 가진 경우가 많습니다.

 

개발자는 애니메이션 기능 코드를 그대로 사용할 수 없어

기존 코들르 몬스터 형태에 맞게 다시 작성합니다.


3.1.3 결론

상속에만 의존하여 게임을 개발할 때 생기는 문제점을 정리하면 다음과 같습니다.

- 오히려 코드를 재사용하기 힘든 경우가 생길 수 있습니다.

- 기획자가 새로운 오브젝트를 만들려면 프로그래머에게 의존해야 합니다.

 

이러한 문제를 해결하려면 컴포넌트 패턴을 사용해야 합니다