본문 바로가기
Engineer/물리엔진

게임엔진에 사용되는 디자인 패턴(Harold Serano)

by _제이빈_ 2022. 3. 28.

원문: Design Patterns in Game Engine Development

 

이제 막 프로그래밍 언어들의 구문/문법을 알게 된 것이 프로그래머가 되었다는 말은 아니다. 아니라고 하고 싶지만 트루다. 진짜 프로그래머가되려면 데이터구조, 알고리즘, 그리고 디자인 패턴에 대한 지식이 필요하다. 문법을 아는 것은 알파벳 아는 정도이다. 누구든지 일주일이면 프로르램의 구문이나 문법을 배울 수 있지만, 모듈화 되어있고 유연하고 유지관리한 프로그램을 개발하는 것은 불가능하다.

 

이게 독자분의 동기를 오히려 감쇠시킨 것 같지만, 디자인패턴을 배워서 훌륭한 개발자가 되어 봅시다!

제일 많이 사용되는 디자인 패턴은 아래와 같습니다.

  • Singleton Design Pattern: 프로그램이 시작될 때 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴. 여러 쓰래드에서 사용할 수 있기 때문에 효율을 높일 수 있다.
  • Strategy Design Pattern: 객체들이 할 수 있는 행위 각각에 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스 정의
  • Observer Design Pattern: 객체의 상태 변화를 관찰하는 관찰자 패턴.
  • Composite Design Pattern: 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴. 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스 사용 가능.
  • Model-View-Controller Design Pattern: 실제적인 일을 하는 부분, 어떻게 처리를 할지를 알려주는 부분, 구동되는 무언가를 보여주는 부분으로 구성

게임엔진 개발의 관점에서 위의 각 디자인 패턴에 대해서 다룬다. 물론 어떤 앱이든 게임개발에서 사용될 수 있다.

Singleton Design Pattern

게임에서는 영화처럼 한 명의 디렉터가 존재한다. 디렉터는 게임에서 일어나는 모든 것을 수행하는 클래스이다. 오브젝트를 랜더링 하고, 위치를 업데이트 해주고, 플레이어의 입력을 정확한 케릭터에 전달해주는 등의 역할을 수행한다. 싱글톤 디자인 패턴을 통해 디렉터가 하나이상이 생성되는 것을 방지한다. 여기서작성하는 방법을 배울 수 있다. 

Strategy Design Pattern

게임에서는 입력 컨트롤러와 게임 로직의 상호작용을 분리시켜야 한다. 즉, 게임의 로직은 입력컨트롤러(버튼, 제스쳐,조이스틱)의 형식에 상관없이 동일한 종류의 입력을 받아야한다. 각 컨트롤러는 사용자들이 다르게 다루지만서도 게임에는 동일한 논리로 받아들여져야한다. 그리고 컨트롤러를 추가하거나 제거해도 게임이 고장나면 안된다. 이렇게 분리된 행동과 유연성은 Strategy 패턴으로 실현한다. 게임의 논리를 변경할 필요 없이 컨트롤러부만 교체해서 유연성을 높일 수 있다. 작성하는 방법은 여기서 배울 수 있다. 

Observer Design Pattern

게임 개발에서는 모든 클래스가 약하게 연관 되어 있어야 한다. 즉 각 클래스는 소통할 수 있어야 하면서도 서로 잘 몰라야한다는 것이다. 의도되지 않은 버그없이 새로운 특징들을 추가하기 위해서는 각 클래스를 모듈화하고 유연하게 만들어야한다. 보통 한 오브젝트가 다른 오브젝트에게 메시지를 보내게 된다. 각 오브젝트는 통신을 할 뿐 각 기능 동작에 대해 알 필요는 없는 것이다. 작성하는 방법은 여기서(예정) 배울 수 있다. 

 

Composite Design Pattern

게임은 보통 많은 뷰가 있다. 캐릭터가 랜더링 되어나오는 메인뷰가 있고 여타 다른 것을 보여주는 서브뷰가 있다. 모바일이라면 버튼이 곧 뷰가 된다. 게임개발에 있어서는 유지관리가 가능한지가 중요하게 다뤄져야한다. 각 뷰가 다른 기능 명이나 다른 접근방법을 가지며 ㄴ안된다. 대신 모든 뷰가 통합된 한 접근점을 통해야한다. 이때 사용되는 것이 Composite 패턴이다. 각 뷰 가 트리구조와 비슷하여서 통합된 접근 포인트로 관리할 수 있다. 작성하는 방법은 여기서(예정) 배울 수 있다. 

Model-View-Controller Design Pattern

MVC가 락밴드라면 아마 비틀즈일거다. 의심할 겨를이 없다. 가장 사랑받는 패턴이다. 본인을 포함한 많은 프로그래머들이 이 패턴을 배우기 시작했을땐 아마 3가지 기본패턴으로 구성된 패턴이라는 것을 알지 못했을 것이다. 만약 이것을 이해하고 있지 않다면 매우 햇갈릴 건ㅅ이다. 그 3가지 기본 패턴은 아래와 같다.

  • Strategy Design Pattern
  • Observer Design Pattern
  • Composite Design Pattern

위 그림과 같이 Strategy 패턴이 컨트로러부이다. 이 패턴이 유저의 입력을 게임로직과 뷰로 부터 분리시킨 것이다. Composite 패턴은 모든 뷰를 나타낸다. 그리고 Observer 패턴으로 게임로직을 디자인한다. 게임로직은 뷰나 컨트롤러의 정보를 모른체로 루즈한 클레스들 관계를 만들어 자기 정보를 교환한다.

반응형

댓글