C++ Practice

C++ 디자인 패턴 - 컴포넌트 패턴(Component Pattern)

Srff5123 2024. 7. 29. 17:13
728x90

컴포넌트 패턴

한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있게 한다.

 

컴포넌트 패턴은 객체 지향 프로그래밍에서 재사용성과 유연성을 극대화하기 위해 설계된 디자인 패턴으로,

이 패턴은 객체의 기능을 작은, 독립적인 모듈(컴포넌트)로 분리하여, 각 컴포넌트가 특정 기능을 제공하도록 한다.

이를 통해 복잡한 시스템을 간단하게 만들고, 시스템의 유연성을 증가시키며, 모듈 간의 결합도를 낮출 수 있다.

 

 

1. 컴포넌트(Component)

시스템 내에서 특정 기능을 제공하는 독립적인 객체로 각 컴포넌트는 자신의 상태와 행동을 가지며, 다른 컴포넌트 와의 상호 작용을 통해 시스템의 전체 기능을 구현한다.

 

2. 엔티티(Entity)

컴포넌트를 포함하는 객체로, 게임에서는 보통 게임 오브젝트를 의미한다. 엔티티는 여러 컴포넌트를 조합해

복합적인 기능을 수핸한다.

엔티티는 컴포넌트를 추가하거나 제거해 기능을 동적으로 변경할 수 있다.

 

3. 시스템(System)

특정 종류의 컴포넌트를 관리하고 처리하는 객체로 시스템은 엔티티의 컴포넌트를 검사하고, 필요한 처리를 수행합니다.

시스템은 특정 컴포넌트의 상태를 업데이트하거나, 컴포넌트 간의 상호작용을 처리한다.

 

장점

1. 각 컴포넌트는 독립적으로 개발 및 수정이 가능해 시스템의 유연성을 높일수있다. 특정 기능을 변경하거나 추가할 경우 시스템의 다른 부분에 영향을 미치지 않는다.

 

2. 컴포넌트는 재사용이 가능하여 코드 중복을 줄일 수 있다. 같은 컴포넌트를 여러 엔티티에서 사용할 수 있고, 시스템의 복잡성을 줄일 수 있다.

 

3. 기능이 잘 정의된 모듈로 나뉘어져 있어, 시스템의 유지보수 및 확장이 용이하다. 또한 각 컴포넌트는 독립적으로 작업이 가능하여 전체 시스템의 안정성을 높인다.

 

4. 엔티티가 실행 중일 때 동적으로 컴포넌트를 추가하거나 제거할 수 있어, 실시간으로 기능을 조정할 수 있다.

 

예시

게임에서의 컴포넌트 패턴은 보통 엔티티-컴포넌트-시스템 아키텍처로 구현된다.

 

1. 엔티티 : 게임 내에서 존재하는 객체(캐릭터, 적, 아이템) 엔티티는 일반적으로 ID만을 가지며, 어떤 기능이 필요한지에 대한 정보는 포함하지 않는다.

 

2. 컴포넌트 : 엔티티가 수행하는 기능을 정의한다. 예를 들어 위치를 저장하는 TransformComponent, 물리적 속성을 정의하는 PhysicsComponent, 그래픽 렌더링인 RenderComponent가 있다.

 

3. 시스템 : 특정 컴포넌트 유형을 처리하는 기능을 가진 객체로 MovementSystem은 TransformComponent, PhysicsComponent 를 이용해 물리적 이동을 처리할 수 있다.

 

 

컴포넌트 패턴을 복잡한 시스템을 작은, 독립적인 모듈로 나누어 관리하는 데 유용하며, 이를 통해 시스템의 유연성, 재사용성, 모듈화를 강화할 수 있다.

728x90