본문 바로가기

C++

게임에 디자인 패턴 적용하기

1.  싱글톤 패턴 (Singleton Pattern)

가장 많이 사용한 패턴이다. 주로 키 입력 매니저, 타임 매니저 등 하나만 있으면 되는 매니저 클래스를 만들 때 사용했다. 예를 들어 싱글톤으로 사운드 매니저를 만든 경우, 플레이어나 몬스터 등의 클래스에서 효과음이 필요할 때 마다 사운드 매니저로부터 인스턴스를 얻어와 소리를 재생하는 방식을 썼다.

 

장점 : 편한 글로벌 액세스 제공, 단일 인스턴스 보장, 처음 액세스 시 생성되므로 객체 생성 시간이 적음

단점 : 개방 - 폐쇄 원칙에 어긋남, 높은 결합도를 가짐, 멀티 쓰레드 환경에서 동기화 처리를 하지 않으면 인스턴스가 두 개 이상 만들어질 가능성이 있음

 

2. 추상 팩토리 패턴 (Abstract Factory Pattern)

API 배울 때 다양한 bullet 클래스를 만들면서 사용해봤다. bullet의 종류가 여러가지인 경우(일반, 유도탄, 회전 등) 추상 팩토리 클래스에서 객체 생성의 책임을 맡았다.

 

장점 : 인스턴스 생성을 서브 클래스에게 위임하므로 의존성을 낮춤, 쉽게 다른 객체로 대체할 수 있음

단점 : 추상 팩토리에서 코드 수정 시 모든 서브 클래스의 코드 역시 변경해야함

 

3. 옵저버 패턴

DirectX 3D 배울 때 카메라 클래스에서 회전 또는 이동을 할 때 월드에 구현된 오브젝트들에게 그 정보를 전달하기 위해 사용한 패턴이다. 

 

장점 : observer와 subject 간의 결합도가 낮음, observer가 subject에게 자기 자신을 등록하거나 삭제하는 것이 자유로움

단점 : 동일한 변경 작업이 서로 다른 observer 객체에 의해 반복 수행될 수 있음

 

4. 컴포넌트 패턴

DirectX 3D 배울 때 버퍼, 리소스 등을 컴포넌트로 만들어서 개체 클래스에서 컴포넌트를 추가하게 만들었다. 유니티에서 게임을 만들 때도 컴포넌트 패턴을 사용한다.

 

장점 :  상속을 사용하는 경우에 비해 크기를 줄일 수 있음, 느슨한 구조(디커플링)로 개체 클래스에서는 필요한 컴포넌트만 사용할 수 있음

단점 : 동일한 변경 작업이 서로 다른 observer 객체에 의해 반복 수행될 수 있음, 컴포넌트끼리 통신이 필요한 경우 강한 결합성을 가지게 되거나 메시지 정보 형태에 한계를 가질 수 있음

 

5. 브릿지 패턴

MFC 툴 배울 때 쯤 배웠지만 실제로 개발할 때 활용해본 적은 없다..

 

장점 :  기능과 구현을 분리할 수 있음, 다른 개체에서도 해당 기능을 사용할 수 있음

단점 : 디자인이 복잡함

'C++' 카테고리의 다른 글

렌더링 파이프라인  (0) 2020.02.17
더블 버퍼링과 스왑 체인  (0) 2020.02.17
정적 바인딩, 동적 바인딩, 가상 함수 테이블  (0) 2020.02.16
BFS 구현 (큐)  (0) 2020.02.16
DFS 구현 (재귀, 스택)  (0) 2020.02.16