Design Pattern

mangez_js·2024년 12월 27일

Study

목록 보기
34/47

생성 패턴(Creational Patterns)

객체 생성 과정에서의 복잡성을 줄이고, 객체 생성 메커니즘을 유연하게 만드는 데 초점이 맞춰져 있습니다.

  • 주요 패턴
  1. Singleton
    ∘ 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장합니다.
    ∘ 사용 사례 : DB 연결, 설정 관리, 로깅
  2. Factory Method
    ∘ 객체 생성 코드를 클라이언트에서 분리하여 구체적인 클래스 이름 없이 객체를 생성할 수 있도록 합니다.
    ∘ 사용 사례 : 객체 타입이 동적으로 결정되는 경우
  3. Abstract Factory
    ∘ 관련된 객체들을 그룹으로 생성해야 할 때 사용됩니다.
    ∘ 사용 사례 : 서로 다른 플랫폼(Windows, macOS)용 GUI 생성
  4. Builder
    ∘ 객체의 생성 과정을 단계적으로 처리하여, 복잡한 객체를 간단히 생성할 수 있도록 합니다.
    ∘ 사용 사례 : 복잡한 초기화가 필요한 객체(ex: JSON 파서)
  5. Prototype
    ∘ 기존 객체를 복사하여 새로운 객체를 생성합니다.
    ∘ 사용 사례 : 객체 생성 비용이 높은 경우(ex: 대규모 데이터베이스 객체 복제)

구조 패턴(Structural Patterns)

클래스와 객체를 효율적으로 조합하여 더 큰 구조를 만드는 데 사용됩니다.

  • 주요 패턴
  1. Adapter
    ∘ 호환되지 않는 인터페이스를 서로 연결해주는 역할
    ∘ 사용 사례 : 기존 코드와 새로운 코드 통합
  2. Bridge
    ∘ 구현과 인터페이스를 분리하여 독립적으로 확장 가능하도록 합니다.
    ∘ 사용 사례 : 서로 다른 OS에서 동일한 기능을 구현할 때
  3. Composite
    ∘ 객체를 트리 구조로 만들어, 개별 객체와 그룹 객체를 동일하게 다를 수 있도록 합니다.
    ∘ 사용 사례 : 파일 시스템(디렉토리와 파일)
  4. Decorator
    ∘ 기존 객체에 기능을 동적으로 추가합니다.
    ∘ 사용 사례 : I/O 시스템 처리(Java의 BufferedReader)
  5. Facade
    ∘ 복잡한 서브시스템을 단순화하기 위해 고수준 인터페이스를 제공합니다.
    ∘ 사용 사례 : 복잡한 API 라이브러리를 단순화
  6. Flyweight
    ∘ 다수의 객체를 공유해 메모리를 절약합니다.
    ∘ 사용 사례 : 대량의 문자열 저장(문자열 풀)
  7. Proxy
    ∘ 다른 객체에 대한 접근을 제어합니다.
    ∘ 사용 사례 : 원격 객체, 지원 로딩, 접근 제어

행동 패턴(Behavioral Patterns)

객체 간의 책임 할당과 커뮤니케이션에 초점을 둡니다.

  • 주요 패턴
  1. Chain of Responsibility
    ∘ 요청을 처리할 수 있는 여러 객체를 체인으로 묶어 요청을 순차적으로 전달
    ∘ 사용 사례 : 이벤트 핸들링 시스템
  2. Command
    ∘ 요청을 객체로 캡슐화하여 실행, 취소 드의 작업을 추적 기능
    ∘ 사용 사례 : 실행 취소(Undo), 작업 큐
  3. Interpreter
    ∘ 언어의 문법을 정의하고 해석합니다.
    ∘ 사용 사례 : SQL 쿼리 파서, 정규식 엔진
  4. Iterator
    ∘ 컬렉션의 요소를 순차적으로 접근하는 방법을 제공합니다.
    ∘ 사용 사례 : Java의 Iterator
  5. Mediator
    ∘ 객체 간의 상호작용을 중재하여 결합도를 낮춥니다.
    ∘ 사용 사례 : 채팅 시스템에서 사용자 간 메시지 전달
  6. Memento
    ∘ 객체 상태를 캡슐화하여 나중에 복원 가능
    ∘ 사용 사례 : 게임 상태 저장/복원
  7. Observer
    ∘ 객체 상태 변화 시, 의존 객체들에게 자동으로 알림
    ∘ 사용 사례 : 이벤트 리스너, GUL
  8. State
    ∘ 객체 상태에 따라 다른 행동을 수행
    ∘ 사용 사례 : 문 상태(열림/닫힘)
  9. Strategy
    ∘ 알고리즘을 캡슐화하여 런타임에 교체 가능
    ∘ 사용 사례 : 정렬 알고리즘 변경
  10. Template Method
    ∘ 알고리즘의 구조를 정의하고, 세부 구현은 서브클래스에 위임
    ∘ 사용 사례 : 데이터 처리 파이프라인
  11. Visitor
    ∘ 객체 구조를 순회하며 새로운 기능을 추가
    ∘ 사용 사례 : 복잡한 객체 그래프 탐색

장점

  1. 재사용성 향상
  2. 가독성 및 유지보수성 향상
  3. 확장성 증가
  4. 표준화된 설계

주의점

  • 패턴의 과도한 사용은 코드 복잡성을 증가시킬 수 있습니다.
  • 특정 문제를 해결하기 위한 패턴이 항상 적합한 것은 아닙니다.
  • 패턴을 도입하기 전에 요구사항과 상황을 명확히 분석해야 합니다.

0개의 댓글