Architecture/DesignPatterns

디자인 패턴의 종류 한눈에 보기

누구세연 2024. 11. 26. 21:36

디자인 패턴은 개발자들이 코드를 더 구조적이고 효율적으로 작성하도록 돕는 중요한 개념입니다.

 

이 글에서는 자주 사용되는 디자인 패턴을 유형별로 정리하여 한눈에 알아볼 수 있도록 준비했습니다. 😊

 

디자인 패턴이란?

디자인 패턴은 소프트웨어 개발에서 반복적으로 나타나는 문제를 해결하기 위한 재사용 가능한 설계 템플릿입니다.
이는 **GoF(Gang of Four)**의 책에서 처음 체계적으로 소개되었으며, 크게 세 가지 유형으로 분류됩니다.

  1. 생성 패턴 (Creational Patterns): 객체 생성과 관련된 문제 해결
  2. 구조 패턴 (Structural Patterns): 클래스와 객체를 효율적으로 구성
  3. 행동 패턴 (Behavioral Patterns): 객체 간 상호작용과 역할 분담에 초점

생성 패턴 (Creational Patterns)

객체 생성 과정을 캡슐화하여 유연성과 확장성을 높이는 패턴입니다.

1. 싱글톤(Singleton)

하나의 인스턴스만 생성되도록 보장합니다.

활용 사례: DB 연결, 설정 관리 

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

2. 팩토리 메서드(Factory Method)

  • 객체 생성을 서브클래스에 위임
  • 활용 사례: ShapeFactory를 사용해 다양한 Shape 객체 생성

3. 빌더(Builder)

  • 복잡한 객체 생성을 단계적으로 처리
  • 활용 사례: StringBuilder

4. 프로토타입(Prototype)

  • 기존 객체를 복사하여 새로운 객체 생성
  • 활용 사례: 성능이 중요한 대량 객체 생성

5. 추상 팩토리(Abstract Factory)

  • 관련된 객체들을 묶어 일관된 방식으로 생성
  • 활용 사례: GUI 컴포넌트 생성

 

구조 패턴 (Structural Patterns)

클래스와 객체를 효율적으로 조합하여 더 나은 구조를 만드는 패턴입니다.

1. 어댑터(Adapter)

  • 호환되지 않는 인터페이스를 연결
  • 활용 사례: InputStreamReader

2. 브리지(Bridge)

  • 추상화와 구현을 분리하여 독립적으로 확장 가능

3. 컴포지트(Composite)

  • 트리 구조로 객체를 구성하여 단일 객체와 복합 객체를 동일하게 처리

4. 데코레이터(Decorator)

  • 객체에 동적으로 기능 추가
  • 활용 사례: BufferedReader

5. 파사드(Facade)

  • 복잡한 시스템의 간단한 인터페이스 제공

6. 플라이웨이트(Flyweight)

  • 공유를 통해 메모리 사용 최소화

7. 프록시(Proxy)

  • 객체 접근 제어
  • 활용 사례: JPA Lazy Loading

행동 패턴 (Behavioral Patterns)

객체 간 상호작용과 역할 분담을 효율적으로 관리하는 패턴입니다.

1.  책임 연쇄(Chain of Responsibility)

  • 요청을 여러 객체에 전달하며 처리

2. 커맨드(Command)

  • 요청을 객체로 캡슐화하여 실행을 나중으로 연기

3. 인터프리터(Interpreter)

  • 문법 표현을 위한 패턴

4. 이터레이터(Iterator)

  • 컬렉션 요소를 순차적으로 접근
  • 활용 사례: for-each 루프

5. 중재자(Mediator)

  • 객체 간 상호작용을 조정하는 중재 역할

6. 메멘토(Memento)

  • 객체 상태를 저장 및 복원

7. 옵서버(Observer)

  • 상태 변화 시 구독자에게 알림
  • 활용 사례: Event Listener

8. 상태(State)

  • 객체 상태에 따라 행동이 바뀜

9. 전략(Strategy)

  • 알고리즘을 캡슐화하여 교체 가능
  • 활용 사례: 결제 수단 전략 구현

10. 템플릿 메서드(Template Method)

  • 알고리즘 구조를 정의하고, 세부 처리를 서브클래스에서 구현

11. 방문자(Visitor)

  • 객체 구조를 변경하지 않고 새로운 연산 추가

 

💡 패턴 선택 시 패턴 자체보다는 문제 해결에 초점을 맞춰야 합니다.
디자인 패턴은 애플리케이션 설계를 더욱 효율적이고 유지보수하기 쉽게 만들어 줍니다. 실무에 적용하면서 점차 익숙해지는 것을 목표로 해보세요!