컴포넌트란?
- 독립적, 교체에 용이하고, 재사용 가능한 기능들의 집합
- 다른 컴포넌트와 상호작용하기 위해 디자인된 소프트웨어 객체
- 기능을 수행하기 위한 목적이 있고 그에 맞는 인터페이스를 제공
왜 컴포넌트를 사용하는가?
확장성
- 기존의 컴포넌트를 기반으로 새로운 행동으로 확장하기에 용이
- Renderer -> Sprite, Model, Text, Particle, …
재활용성
독립성
- 컴포넌트는 최대한 상호 독립적으로 작동하도록 디자인 됨
- Transform 같은 건 조금 예외적이긴 한 것 같다
교체성
- 컴포넌트는 쉽게 다른 컴포넌트로 대체가 가능
- Object 객체에 추가 / 제거가 용이함
고유 시스템에 의존적
- 컴포넌트들은 종속되어 있는 각 시스템에 의해서만 업데이트됨
- Sprite -> Graohics System
- SFX, BGM -> Sound System
- Collision -> Physics System
- …
작동 원리
- 각 컴포넌트는 게임 스테이트에 관련된 데이터를 가지고 있음
- 엔티티(게임 오브젝트)는 여러 컴포넌트를 가지고 있음
- 시스템은 각자 업데이트/작동시킬 컴포넌트를 가지고 있고 이를 실행
장점
버전 업데이트에 용이
- 새로운 컴포넌트를 개발하고 기존 버전에 적용한 컴포넌트를 교체하는 데 용이
저비용
- 써드파티 컴포넌트를 사용하면 개발 및 유지관리 비용을 낮출 수 있음
효율적인 개발 & 독립성
- 기존 시스템 혹은 컴포넌트에 영향을 주지 않고 새 기능을 개발
- 기능이 독립적으로 구분되어 개발되므로 동시 개발에 용이
재사용성
출처