본문 바로가기
java

디자인패턴 사용처 컨닝페이퍼

by 포잉띠 2024. 7. 24.

1. 전략 패턴 (Strategy Pattern)

주된 상황:

  • 여러 알고리즘(또는 전략)이 있고, 이들을 런타임에 선택해야 하는 경우
  • 알고리즘을 캡슐화하여 클라이언트 코드와 독립적으로 변경하고자 하는 경우
  • 예: 결제 방법(신용카드, 페이팔 등), 정렬 알고리즘, 데이터 압축 방식

2. 팩토리 메소드 패턴 (Factory Method Pattern)

주된 상황:

  • 객체 생성의 책임을 서브클래스로 넘기고, 클라이언트 코드와 객체 생성 로직을 분리하고자 하는 경우
  • 구체적인 클래스의 인스턴스를 생성할 때 직접적인 의존성을 피하고자 하는 경우
  • 예: 다양한 데이터베이스 연결 객체 생성, 여러 종류의 문서 객체 생성

3. 옵저버 패턴 (Observer Pattern)

주된 상황:

  • 한 객체의 상태 변화가 다른 객체들에게 자동으로 알림을 보내야 하는 경우
  • 이벤트 중심의 시스템에서 여러 컴포넌트가 특정 이벤트에 반응해야 하는 경우
  • 예: GUI 이벤트 핸들링, 이벤트 로깅 시스템, 실시간 데이터 스트리밍

4. 어댑터 패턴 (Adapter Pattern)

주된 상황:

  • 기존 클래스의 인터페이스가 요구사항에 맞지 않을 때
  • 여러 클래스가 동일한 인터페이스를 구현해야 할 때
  • 서드파티 라이브러리나 기존 코드와의 호환성을 유지하면서 새로운 기능을 추가해야 할 때
  • 예: USB-C to HDMI 어댑터, 레거시 코드와 새로운 시스템 통합

5. 템플릿 메소드 패턴 (Template Method Pattern)

주된 상황:

  • 알고리즘의 구조를 정의하고, 일부 단계를 서브클래스에서 구현하도록 하는 경우
  • 알고리즘의 공통적인 부분은 슈퍼클래스에 두고, 세부적인 부분은 서브클래스에서 변경하고자 하는 경우
  • 예: 데이터 처리 파이프라인, 테스트 프레임워크에서 테스트 실행 흐름

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

주된 상황:

  • 객체에 추가적인 기능을 동적으로 부여하고자 하는 경우
  • 상속 대신 구성(컴포지션)을 통해 기능을 확장하고자 하는 경우
  • 예: 파일 입출력 스트림에 버퍼링, 암호화 등의 기능 추가, GUI 컴포넌트에 스크롤바, 테두리 등의 기능 추가

7. 싱글톤 패턴 (Singleton Pattern)

주된 상황:

  • 클래스의 인스턴스를 하나만 생성하고, 이를 전역적으로 접근할 수 있도록 해야 하는 경우
  • 애플리케이션 전역에서 공유되는 자원이 필요한 경우
  • 예: 애플리케이션 설정 객체, 데이터베이스 연결 객체, 로그 관리 객체

8. 커맨드 패턴 (Command Pattern)

주된 상황:

  • 요청을 객체로 캡슐화하여 요청을 매개변수화하거나, 요청을 큐에 저장하고 나중에 실행하거나, 요청을 취소 가능하게 할 때
  • 작업을 요청하는 객체와 작업을 수행하는 객체를 분리하고자 할 때
  • 예: GUI 버튼 클릭, 요청 취소 기능, 매크로 기록 및 실행

9. 반복자 패턴 (Iterator Pattern)

주된 상황:

  • 컬렉션의 내부 구조를 노출하지 않고, 컬렉션의 요소들을 순회하고자 할 때
  • 컬렉션의 다양한 순회 방법을 제공하고자 할 때
  • 예: 리스트, 트리, 해시맵 등의 데이터 구조 순회

10. 상태 패턴 (State Pattern)

주된 상황:

  • 객체의 상태에 따라 행동이 달라질 때
  • 상태를 객체로 캡슐화하여 상태 전환을 관리하고자 할 때
  • 예: 문서 편집기의 편집 상태와 읽기 전용 상태, 게임 캐릭터의 행동 상태

11. 프록시 패턴 (Proxy Pattern)

주된 상황:

  • 실제 객체에 대한 접근을 제어하거나, 실제 객체 대신 대리 객체를 통해 요청을 처리하고자 할 때
  • 접근 제어, 지연 초기화, 원격 프록시 등을 구현하고자 할 때
  • 예: 가상 프록시, 보호 프록시, 원격 프록시

12. 복합 패턴 (Composite Pattern)

주된 상황:

  • 객체들을 트리 구조로 구성하여 부분-전체 계층을 구현하고자 할 때
  • 클라이언트가 개별 객체와 복합 객체를 동일하게 처리하도록 하고자 할 때
  • 예: 파일 시스템의 디렉터리 구조, GUI 구성 요소의 계층 구조

요약:

  • 전략: 알고리즘 교체 필요 시
  • 팩토리 메소드: 객체 생성과 클라이언트 코드 분리
  • 옵저버: 상태 변화 알림 필요 시
  • 어댑터: 인터페이스 호환성 문제 해결
  • 템플릿 메소드: 알고리즘 구조 정의 및 단계 구현
  • 데코레이터: 객체에 기능 동적 추가
  • 싱글톤: 단일 인스턴스 필요 시
  • 커맨드: 요청 캡슐화 및 실행 분리
  • 반복자: 컬렉션 요소 순회
  • 상태: 상태에 따른 행동 변경
  • 프록시: 접근 제어 및 대리 처리
  • 복합: 트리 구조의 부분-전체 계층 구현