본문 바로가기

디자인 패턴4

게임 프로그래밍 패턴 | Chapter 04 관찰자 패턴 4. 관찰자 패턴 4.1 예제: 업적 달성 업적(achievement) 시스템을 게임에 추가한다고 해보자. 업적 종류가 광범위하고 달성할 수 있는 방법도 다양하다 보니 업적 시스템 코드를 담당하는 코드는 한데 모아두는 게 좋다. 그런데 업적은 여러 게임 플레이 상황에서 발생시킬 수 있어야 한다. 이런 코드 전부와 커플링되지 않고 업적 코드를 동작하게 하려면 관찰자 패턴(observer pattern)을 쓰면 된다. 4.2 작동 원리 ■ 4.2.1 관찰자 Observer 클래스는 다음과 같은 인터페이스로 정의된다. 어떤 클래스든 Observer 인터페이스를 구현하기만 하면 관찰자가 될 수 있다. class Observer { public: virtual ~Observer() = default; virtua.. 2022. 8. 8.
게임 프로그래밍 패턴 | Chapter 03 경량 패턴 3. 경량 패턴 3.1 예제: 숲에 들어갈 나무들 우리가 실시간 게임에서 볼 수 있는 수천 그루가 넘는 나무들로 가득 찬 빽빽한 숲은 각각 수천 폴리곤의 형태로 표현되어 있다. 이런 숲을 그리기 위해서 나무마다 필요한 데이터를 코드로 표현하면 다음과 같다. class Tree { private: // 줄기, 가지, 잎의 형태를 나타내는 폴리곤 메시 Mesh mesh; // 나무 껍질과 잎사귀 텍스처 Texture bark; Texture leaves; // 숲에서의 위치와 방향 Vector position; double height; double thickness; // 나무가 서로 다르게 보이도록 음영을 조절 Color barkTint; Color barkTint; }; 그런데 사실 숲에 나무가 수천 .. 2022. 8. 5.
게임 프로그래밍 패턴 | Chapter 02 명령 패턴 2. 명령 패턴 명령 패턴(command pattern)은 메서드 호출을 실체화(reify)한 것이다. 실체화 혹은 일급(first-class)은 어떤 개념을 변수에 저장하거나 함수에 전달할 수 있도록 데이터, 즉 객체로 바꿀 수 있다는 것을 의미한다. 여기에서 명령 패턴은 메서드 호출을 객체로 만들었다는 의미이다. 2.1 예제: 입력 키 변경 모든 게임에서는 버튼이나 키보드, 마우스를 누르는 등의 사용자 입력을 읽는 코드가 있다. 이런 코드는 입력을 받아서 게임에서 의미 있는 행동으로 전환된다. 입력 단축키를 변경할 수 없게 하려면 다음과 같이 간단하게 구현하면 된다. void InputHandler::handleInput() { if (isPressed(BUTTON_X) jump(); else if .. 2022. 8. 4.
게임 프로그래밍 패턴 | Chapter 01 구조, 성능, 그리고 게임 1. 구조, 성능, 그리고 게임 1.1 소프트웨어 구조 ■ 1.1.1 좋은 소프트웨어 구조 좋은 소프트웨어 구조란, 무언가를 고쳐야 할 때 그럴 줄 알았다는 듯이 코드가 준비되어 있는 것을 의미한다. 즉, 코드를 거의 건드리지 않고도 적당한 함수를 호출하면 원하는 작업을 할 수 있어야 한다. 먼저 구조는 변경과 관련이 있다. 얼마나 코드를 쉽게 변경할 수 있느냐가 코드 설계를 평가하는 척도가 된다. ■ 1.1.2 코드를 고치는 방법 무슨 이유에서든지 코드를 고쳐야 한다면 먼저 기존 코드를 이해해야 한다. 머릿속에 코드에 대한 큰 그림을 그리고 나면 해결책을 금방 찾을 수 있다. 컴파일이 성공하고 원하는 대로 코드가 돌아가면 코드 리뷰를 요청하기 전에 코드를 정리해야 한다. 추가한 코드를 나머지 코드와 깔.. 2022. 7. 30.