Post

디자인패턴 GOF 2

GOF 패턴의 각 사용방법

디자인패턴 GOF 2

GOF 패턴 - 심화


생성

어떻게 생성할 것인가

Singleton

게임에서 객체를 하나만 만들겠다.

  • GameManager
  • AudioManager
  • LogManager

Factory Method

Base 부모를 기반으로하고, 자식을 객체로 만들겠다.

  • Enemy_Spider
  • Enemy_Ant
  • Enemy_Boss

Abstract Factory

비슷한 객체끼린 한 번 더 묶어 추상화

  • TrapBase
    • SpinTrapBase
      • SpinPlatform
      • SpinBar
    • ProjectileTrapBase
      • ArrowTrap
      • ThrowingBallTrap
    • MoveTrapBase
      • MovePlatform
      • PushingBarTrap
    • DropTrapBase
      • DropPlatform
      • DropBombTrap

Builder

복잡한 객체를 단계적으로 생성

  • 생성자에서 한 번에 입력 (X)
  • .SetHP(), .SetAttack(), .Build() (O)

Prototype

복사해서 생성

1
2
3
  Monster* Clone();
  
  DuplicateObject();

구조

어떻게 연결할 것인가

Adapter

호환되지 않는 인터페이스 연결

Bridge

기능과 구현 분리

  • Weapon
    • Sword
    • Gun
  • Renderer
    • DX12
    • Vulkan

Composite

트리 구조 표현

1
2
3
4
Actor
├─ Mesh
├─ Weapon
└─ Camera

Decorator

기능을 동적으로 추가

1
2
3
4
5
6
7
  Character
    +
    PosionBuff
    +
    SpeedBuff
    +
    ...

Facade

복잡한 시스템을 단순 인터페이스로 제공 외부

1
  GameSystem->StartGame();

내부

1
2
3
4
  LoadMap();
  CreatePlayer();
  InitUI();
  ...

Flyweight

공통 데이터 공유

  • 메쉬와 머테리얼은 공유
  • 위치는 개별 보관
    -> 메모리 절약

Proxy (※ 이 부분은 좀 더 공부가 필요 ※)

실제 객체에 바로 접근하지 말고, 대리자 이용


행위

상호작용 정의

Observer

상태 변경 통지

1
  DECLARE_DYNAMIC_MULTICAST_DELEGATE

Strategy

상태에 따라 동작 방식 변경

1
2
  MovementComponent
  -> Walk, Fly, Swim
1
2
  CharacterChange
  -> Controller Mapping Context

Command (※ 이 부분은 좀 더 공부가 필요 ※)

명령을 객체화

State

상태에 따라 동작 변경

1
2
  StateMachine
  -> ChangeAnimation

Template Method

동작 흐름 고정, 세부 구현만 변경

1
2
3
4
5
6
  Attack()
  {
    BeforeAttack();
    DoAttack();
    AfterAttack();
  }

Visitor (※ 지금은 잘 안쓰는 패턴 ※)

객체 구조 수정 없이 기능 추가
모든 객체를 수용할 수 있게 오버라이딩된 공통 메소드를 갖는 클래스 생성

Mediator

객체 간 직접 통신 제거
객체의 상태를 UI, State 등 다른 서브 클래스에게 전달해줄 수 있는 부모 클래스를 갖게 함
Delegate와의 차이점으로는 어디로 데이터를 보내야할지 알고 있다

Chain of Responsibility

요청을 순서대로 처리

1
  Input > UI > Character > World

Iterator

컬렉션 순회

1
  for(auto& Item : Items)

Memento

상태 저장/복원

1
2
3
  SaveGame();
  Undo();
  CheckPoint();

Iterpreter (※ BP나 Behavior Tree 같은걸로 이미 구현이 되어있음 ※)

문법 해석

자주 봤던 문법 패턴

  • Observer (Delegate) : 이벤트 기반
  • Strategy : 이동 방식 알고리즘 교체
  • State : Idle -> Active -> Cooldown
  • Factory Metho : 객체는 자식이 생성
  • Singleton : GameManager
  • Command :
  • Composite : 컴포넌트 붙이기
  • Facade : 외부 호출은 단순하게
This post is licensed under CC BY 4.0 by the author.