상속과 재사용
class Monster
- 인공지능 기능
- 애니메이션 기능
- 공격과 방어 기능
- 물리 기능
class Orc : Monster
- 초록색 피부
- 오크의 애니메이션
- 오크의 스킬
- 그외 오크의 기능
class orcChiftan : Orc
- 대장 모자
- 새로운 무기와 강력 스킬
- 그 외 오크 대장 고유 기술
상속의 한계
class Human
- 모습을 그려주는 렌더
- 물리 기능
- 애니메이션 기능
- 체력 기능
class Player : Human
아직 까지는 문제 없다
class NPC : Human
- 물리 기능 삭제
- 체력 기능 삭제
- 대화 기능 추가
- 거래 기능 추가
상속으로 인해 물리 기능 삭제와 체력 기능 삭제 해야하는 추가 작업이 생겼다.
class Monster : Human
- 애니메이션 효과가 사람과 몬스터가 달라 바꿔야 한다
- 기존 물리를 몬스터 물리로 수정
- 몬스터에 어울리지 않는 Human 기능 삭제
결론
- 상속에만 의존하면 오히려 기존 코드를 재사용하기 힘든 경우가 발생
- 기획자가 새로운 오브젝트를 만들려면 프로그래머에게 의존해야 한다
컴포넌트 패턴
미리 만든 오브젝트를 조립하여 만드는 방식
1. 컴포넌트 미리 여러개 만들기
- 동물에 사용할 다양한 컴포넌트 기능들을 만든다
- 폐, 지느러미, 아가미, 다리, 뿔, 날개, 식사 등
2. 빈 게임 오브젝트 생성
3. 코뿔소 게임 오브젝트 완성
- 원하는 부분을 컴포넌트에서 가져와 코뿔소 오브젝트를 완성한다
4. 상어와 독수리 게임 오브젝트 완성
결론
- 컴포넌트는 기능을 추가하거나 삭제할 때 기존 기능이 망가질 일이 없다
메시지와 브로드캐스팅
컴포넌트 구조에서 '전체 방송'을 이용해 컴포넌트의 특정 기능을 간접적으로 실행할 수 있다
MonoBehaviour
- 유니티에서 미리 만들어 제공하는 클래스이며 컴포넌트에 필요한 기본 기능을 제공한다
- MonoBehaviour를 상속해 만든 컴포넌트는 유니티 제어 받는다
브로드캐스팅
- 여러 오브젝트에 공통인 메소드가 있을 때 하나하나 컴포넌트를 찾아 실행 시키는 것이 아닌 브로드캐스팅 한번으로 한번에 실행