C#

디자인패턴

MJ_119 2024. 6. 24. 21:45

1. 싱글턴 패턴 (Singleton Pattern)

  • 사용 예시: 게임 매니저, 오디오 매니저, 설정 매니저 등 전역적으로 하나만 존재해야 하는 객체에 사용.
  • 장점: 전역 접근이 가능하고, 인스턴스가 하나만 존재함을 보장.
    • 게임 매니저: 게임의 전반적인 상태를 관리하는 객체로, 게임의 진행, 점수, 설정 등을 관리합니다. 게임 내 어디서든 동일한 게임 매니저 인스턴스를 참조할 수 있어야 합니다.
    • 오디오 매니저: 배경 음악, 효과음 등 게임 내 모든 오디오를 관리하는 객체로, 여러 오디오 소스를 일관되게 제어할 수 있습니다.
    • 설정 매니저: 사용자 설정, 게임 설정 등을 관리하는 객체로, 게임 시작 시 설정값을 불러오고 게임 중에 설정을 변경할 수 있습니다.

2. 옵저버 패턴 (Observer Pattern)

  • 사용 예시: 이벤트 시스템, UI 업데이트, 게임 상태 변화 감지.
  • 장점: 객체 간의 느슨한 결합을 유지하면서 이벤트를 전달.
    • 이벤트 시스템: 게임 내 이벤트(예: 플레이어가 아이템을 획득했을 때)를 여러 객체에 알립니다. 옵저버 패턴을 사용하면 이벤트를 발생시키는 객체와 이를 처리하는 객체 간의 결합을 줄일 수 있습니다.
    • UI 업데이트: 게임 내 데이터가 변경될 때 UI를 자동으로 업데이트합니다. 예를 들어, 플레이어의 체력이 변경되면 체력 바가 자동으로 갱신됩니다.
    • 게임 상태 변화 감지: 게임의 상태(예: 게임 오버, 레벨 클리어)가 변경될 때, 이를 감지하고 적절한 행동을 수행합니다.

3. 상태 패턴 (State Pattern)

  • 사용 예시: 캐릭터 상태(예: 걷기, 뛰기, 점프), AI 상태 머신.
  • 장점: 상태 전환을 명확하게 관리하고, 상태에 따른 행동을 정의하기 쉬움.
    • 캐릭터 상태: 캐릭터가 걷기, 뛰기, 점프 등의 상태를 가질 때, 각 상태에 따른 행동을 정의합니다. 상태 전환이 명확하고 관리하기 쉽습니다.
    • AI 상태 머신: 적의 AI가 순찰, 추격, 공격 등의 상태를 가질 때, 각 상태에 따른 행동을 정의합니다.

4. 전략 패턴 (Strategy Pattern)

  • 사용 예시: 다양한 공격 방식, 이동 방식, AI 행동 패턴.
  • 장점: 알고리즘을 캡슐화하고, 런타임에 알고리즘을 교체할 수 있음.
    • 다양한 공격 방식: 플레이어가 여러 가지 공격 방식을 가질 수 있을 때, 각 공격 방식을 독립적으로 관리하고 런타임에 쉽게 교체할 수 있습니다.
    • 이동 방식: 캐릭터의 이동 방식(예: 걷기, 뛰기, 날기)을 전략으로 캡슐화하여 상황에 맞게 이동 방식을 변경할 수 있습니다.
    • AI 행동 패턴: 적의 AI가 다양한 행동 패턴을 가질 때, 각 패턴을 전략으로 캡슐화하여 상황에 맞게 행동 패턴을 변경할 수 있습니다.

5. 팩토리 패턴 (Factory Pattern)

  • 사용 예시: 객체 생성(예: 적 생성, 아이템 생성).
  • 장점: 객체 생성 로직을 캡슐화하여 코드의 복잡성을 줄임.
    • 객체 생성: 적, 아이템 등의 객체를 생성할 때, 팩토리 패턴을 사용하여 객체 생성 로직을 캡슐화하고 코드의 복잡성을 줄입니다.

6. 데코레이터 패턴 (Decorator Pattern)

  • 사용 예시: 무기 강화, 능력 업그레이드.
  • 장점: 객체의 행동을 동적으로 확장할 수 있음.
    • 무기 강화: 기본 무기에 다양한 강화 효과(예: 불, 얼음)를 동적으로 추가할 때 사용합니다.
    • 능력 업그레이드: 캐릭터의 능력을 동적으로 업그레이드(예: 속도 증가, 공격력 증가)할 때 사용합니다.

7. 컴포지트 패턴 (Composite Pattern)

  • 사용 예시: UI 구성 요소, 게임 오브젝트 계층 구조.
  • 장점: 객체들의 트리 구조를 쉽게 관리하고, 단일 객체와 복합 객체를 동일하게 처리할 수 있음.
    • UI 구성 요소: UI 요소들이 트리 구조로 구성될 때, 각 요소를 단일 요소처럼 처리할 수 있습니다. 예를 들어, 패널 안에 버튼과 텍스트가 있을 때, 패널을 단일 객체로 처리할 수 있습니다.
    • 게임 오브젝트 계층 구조: 게임 오브젝트들이 트리 구조로 구성될 때, 단일 오브젝트와 복합 오브젝트를 동일하게 처리할 수 있습니다. 예를 들어, 캐릭터가 여러 부위(머리, 팔, 다리)를 가질 때, 이를 하나의 캐릭터 객체로 처리할 수 있습니다.

8. 커맨드 패턴 (Command Pattern)

  • 사용 예시: 입력 처리, 실행 취소 기능(undo), 매크로 명령어.
  • 장점: 요청을 객체로 캡슐화하여, 요청의 매개변수를 저장하고, 실행 취소 기능을 구현할 수 있음.
    • 입력 처리: 사용자의 입력을 커맨드 객체로 캡슐화하여 처리합니다. 예를 들어, 플레이어의 이동, 공격 등의 입력을 커맨드 객체로 처리하여 입력 이력을 관리할 수 있습니다.
    • 실행 취소 기능(undo): 사용자의 행동을 취소할 수 있는 기능을 구현합니다. 예를 들어, 플레이어가 한 행동을 취소하고 이전 상태로 되돌릴 수 있습니다.
    • 매크로 명령어: 여러 개의 명령어를 하나의 매크로 명령어로 묶어 한번에 실행할 수 있습니다.

9. 객체 풀링 패턴 (Object Pooling Pattern)

  • 사용 예시: 반복적으로 생성 및 파괴되는 객체(예: 총알, 적).
  • 장점: 성능 최적화, 메모리 할당과 해제를 줄여 성능 향상.
    • 반복적으로 생성 및 파괴되는 객체: 총알, 적 등의 객체를 풀링하여 성능을 최적화합니다. 객체를 미리 생성해두고 필요할 때 재사용하여 메모리 할당과 해제를 줄입니다.

10. MVC 패턴 (Model-View-Controller Pattern)

  • 사용 예시: UI 설계, 게임 데이터와 화면 표시 분리.
  • 장점: 데이터 모델, 화면, 사용자 입력의 분리를 통해 코드의 유지보수성과 확장성을 높임.
    • UI 설계: 데이터(Model), 화면(View), 사용자 입력(Control)을 분리하여 각 부분을 독립적으로 관리합니다. 예를 들어, 게임 내 캐릭터의 데이터와 이를 화면에 표시하는 부분, 사용자 입력을 처리하는 부분을 분리하여 코드의 유지보수성과 확장성을 높입니다.