info8995 님의 블로그

디자인 패턴 본문

TIL(Today I Learned)

디자인 패턴

info8995 2025. 3. 14. 19:37

디자인 패턴은 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 패턴으로 나뉘고, 각각 여러 개의 패턴으로 구성되어 있다.


1. 생성 패턴 (Creational Patterns)

객체 생성 과정을 캡슐화하여 객체 생성 방식의 유연성과 재사용성을 높이는 패턴들이다.

싱글톤 (Singleton)

  • 특정 클래스의 인스턴스가 단 하나만 존재하도록 제한하는 패턴
  • getInstance()를 사용하여 객체를 반환
  • ex) 데이터베이스 연결, 로깅 시스템

팩토리 메서드 (Factory Method)

  • 객체 생성을 서브클래스에서 결정하도록 하는 패턴
  • 부모 클래스는 인터페이스를 제공하고, 실제 객체 생성은 자식 클래스에서 구현
  • ex) 여러 유형의 적(enemy)을 생성하는 게임

추상 팩토리 (Abstract Factory)

  • 연관된 객체들의 그룹을 생성하는 패턴
  • 개별 객체가 아니라 객체 군을 생성하는데 사용됨
  • ex) Windows, macOS UI 요소를 생성하는 GUI 라이브러리

빌더 (Builder)

  • 복잡한 객체 생성을 단계별로 수행할 수 있도록 하는 패턴
  • Director가 Builder를 이용하여 객체 생성
  • ex) 캐릭터 생성기, JSON 파서

프로토타입 (Prototype)

  • 기존 객체를 복사(clone)하여 새로운 객체를 생성하는 패턴
  • new 키워드를 직접 사용하지 않고 객체를 복사하여 생성
  • ex) 유닛 복제, 게임에서 스킬 사본 생성

2. 구조 패턴 (Structural Patterns)

객체나 클래스를 조합하여 더 큰 구조를 만드는 패턴으로, 유지보수성과 확장성을 높인다.

어댑터 (Adapter)

  • 호환되지 않는 인터페이스를 변환하여 기존 코드와 연결하는 패턴
  • ex) 게임 패드 입력을 키보드 입력처럼 처리

브리지 (Bridge)

  • 구현과 추상화를 분리하여 독립적으로 확장할 수 있도록 하는 패턴
  • ex) 여러 그래픽 API(OpenGL, DirectX)에 대응하는 렌더링 엔진

컴포지트 (Composite)

  • 객체를 트리 구조로 구성하여 계층 구조를 만들고, 클라이언트가 단일 객체와 동일하게 다룰 수 있도록 함
  • ex) UI 요소(버튼, 패널, 창 등)

데코레이터 (Decorator)

  • 기존 객체에 기능을 동적으로 추가하는 패턴
  • ex) RPG 게임에서 아이템 효과 추가(강화, 마법 부여)

퍼사드 (Facade)

  • 복잡한 서브 시스템을 단순화하여 쉽게 접근할 수 있도록 하는 패턴
  • ex) 게임 엔진에서 복잡한 렌더링 시스템을 감싸는 API

플라이웨이트 (Flyweight)

  • 많은 수의 유사한 객체를 공유하여 메모리를 절약하는 패턴
  • ex) 대규모 RTS 게임에서 수많은 유닛을 관리할 때

프록시 (Proxy)

  • 객체에 대한 접근을 제어하기 위해 대리 객체를 사용하는 패턴
  • ex) 가상 프록시(리소스가 많은 객체의 로딩을 지연)

3. 행위 패턴 (Behavioral Patterns)

객체 간의 상호작용과 책임 분배를 정의하는 패턴이다.

옵저버 (Observer)

  • 객체의 상태 변화가 있을 때, 관련된 객체들(구독자)에게 자동으로 알림을 보내는 패턴
  • ex) 이벤트 시스템(게임에서 체력바 UI가 플레이어의 체력에 반응)

스트래티지 (Strategy)

  • 행위를 캡슐화하여 동적으로 교체할 수 있도록 하는 패턴
  • ex) AI의 이동 방식 변경(추적, 회피, 정찰 등)

커맨드 (Command)

  • 요청을 객체로 캡슐화하여 실행 취소(Undo) 기능을 쉽게 구현하는 패턴
  • ex) 게임 내에서 실행 취소 기능

스테이트 (State)

  • 객체의 상태에 따라 동작이 바뀌는 패턴
  • ex) 플레이어의 상태(이동, 점프, 공격)에 따라 다른 행동 수행

체인 오브 리스폰서빌리티 (Chain of Responsibility)

  • 요청을 여러 개의 처리 객체가 연쇄적으로 처리하는 패턴
  • ex) 로그 레벨별 로깅 시스템

메멘토 (Memento)

  • 객체의 상태를 저장하고 복원하는 패턴(Undo, Redo)
  • ex) 세이브/로드 기능

인터프리터 (Interpreter)

  • 특정 언어의 문법을 해석하는 패턴
  • ex) 게임에서 스크립트 엔진 사용

미디에이터 (Mediator)

  • 객체 간의 직접적인 상호작용을 줄이고, 중앙에서 통제하는 패턴
  • ex) 채팅 시스템(모든 유저가 채널을 통해 메시지를 주고받음)

비지터 (Visitor)

  • 객체 구조를 변경하지 않고 새로운 연산을 추가하는 패턴
  • ex) 게임에서 각종 효과 적용(버프, 디버프)

템플릿 메서드 (Template Method)

  • 알고리즘의 구조를 정의하고 세부적인 구현은 서브클래스에서 결정하는 패턴
  • ex) 몬스터 AI의 공격 패턴

요약

패턴 종류 대표 패턴 특징
생성 패턴 싱글톤, 팩토리, 빌더 객체 생성을 유연하게 함
구조 패턴 어댑터, 데코레이터, 퍼사드 객체 간 관계를 구조적으로 설계
행위 패턴 옵저버, 스트래티지, 커맨드 객체 간 협력과 행동 정의