티스토리 뷰

반응형
GoF 디자인 패턴 23가지 완벽 마스터하기: 핵심 특징 및 요약

📚 소프트웨어 개발자의 필수 지식: GoF 디자인 패턴 23가지 완벽 마스터하기!

소프트웨어 개발자라면 한 번쯤 들어봤을 디자인 패턴(Design Patterns)! 그중에서도 특히 GoF(Gang of Four) 디자인 패턴 23가지는 객체 지향 설계를 이해하고 더 나은 코드를 작성하는 데 필수적인 지식입니다. 하지만 23가지나 되는 패턴을 한 번에 외우고 이해하기란 쉽지 않은데요.


오늘은 이 23가지 GoF 디자인 패턴을 쉽고 효율적으로 학습할 수 있도록 핵심 특징 위주로 정리하고, 한눈에 파악할 수 있는 표까지 제공해 드리겠습니다! 이 글만 잘 익혀두시면 시험 대비는 물론, 실제 개발에서도 큰 도움이 될 거예요.


👷‍♂️ 1. 생성 (Creational) 패턴: 객체 생성의 유연성을 높여라!

생성 패턴은 객체를 만드는 과정을 추상화하고 캡슐화하여, 객체 생성 방식과 클라이언트 코드의 결합도를 낮추는 데 초점을 맞춥니다.


📝 생성 패턴별 핵심 특징

  • 추상 팩토리 (Abstract Factory)
    구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴입니다.
    연관성이 있는 객체 군이 여러 개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화하는 생성 패턴입니다.
    관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하며, `Kit`이라고도 불립니다.
  • 빌더 (Builder)
    복잡한 객체의 생성과 표현(구성)을 분리하여, 동일한 생성 절차로 다양한 표현의 객체를 만들 수 있도록 합니다.
  • 팩토리 메서드 (Factory Method)
    객체를 생성하는 인터페이스는 상위 클래스(Creator)에서 정의하지만, 실제로 어떤 클래스의 인스턴스를 생성할지는 하위 클래스(Concrete Creator)가 결정합니다.
  • 프로토타입 (Prototype)
    기존 객체를 복사(Clone)하여 새 객체를 생성함으로써, 객체 생성 비용을 줄이고 런타임에 동적으로 객체를 추가할 수 있습니다.
  • 싱글턴 (Singleton)
    클래스의 인스턴스가 오직 하나만 존재하도록 보장하고, 그 유일한 인스턴스에 대한 전역적인 접근점을 제공합니다.

📊 생성 패턴 요약 표

패턴 이름 핵심 기능 및 목적
추상 팩토리 (Abstract Factory) 연관된 객체 패밀리(제품군) 생성
빌더 (Builder) 복잡한 객체 단계별 생성 및 표현 분리
팩토리 메서드 (Factory Method) 객체 생성 위임 (서브클래스가 결정)
프로토타입 (Prototype) 기존 객체 복사(클론)를 통한 새 객체 생성
싱글턴 (Singleton) 클래스의 단일 인스턴스 보장 및 전역 접근점

🧱 2. 구조 (Structural) 패턴: 클래스와 객체의 효과적인 조합!

구조 패턴은 클래스와 객체들을 조합하여 더 큰 구조를 만들고, 구조적인 유연성과 효율성을 높이는 데 중점을 둡니다.


📝 구조 패턴별 핵심 특징

  • 어댑터 (Adapter)
    서로 호환되지 않는 인터페이스를 가진 클래스들을 함께 작동할 수 있도록 변환해 줍니다.
  • 브리지 (Bridge)
    구현부(implementation)에서 추상화(abstraction)를 분리하여, 이 둘이 독립적으로 변화하고 확장될 수 있도록 합니다.
  • 컴포지트 (Composite)
    객체들을 트리 구조로 구성하여 부분-전체 계층을 표현하며, 클라이언트가 개별 객체와 객체 컬렉션(복합 객체)을 동일하게 다룰 수 있도록 합니다.
  • 데코레이터 (Decorator)
    기존 객체의 구조를 변경하지 않고, 동적으로 새로운 책임(기능)을 추가하거나 제거할 수 있도록 합니다.
  • 퍼사드 (Facade)
    서브시스템의 복잡한 인터페이스를 단순화된 단일 인터페이스로 제공하여, 클라이언트가 서브시스템과 쉽게 상호작용하도록 합니다.
  • 플라이웨이트 (Flyweight)
    많은 수의 작은 객체들을 효율적으로 공유하여 메모리 사용량을 줄이고 성능을 향상시킵니다.
  • 프록시 (Proxy)
    특정 객체에 대한 접근을 제어하거나 기능을 추가하기 위한 "대리자(proxy)" 또는 "대변자" 역할을 합니다.

📊 구조 패턴 요약 표

패턴 이름 핵심 기능 및 목적
어댑터 (Adapter) 인터페이스 불일치 해결 (변환)
브리지 (Bridge) 추상화와 구현 분리 및 독립적 확장
컴포지트 (Composite) 부분-전체 계층 표현 및 단일성 일치
데코레이터 (Decorator) 동적 책임(기능) 추가
퍼사드 (Facade) 서브시스템의 복잡한 인터페이스 단순화
플라이웨이트 (Flyweight) 대량 객체 공유를 통한 메모리 절약
프록시 (Proxy) 객체 접근 제어 또는 대리자 역할

🏃‍♂️ 3. 행동 (Behavioral) 패턴: 객체 간의 유연한 상호작용!

행동 패턴은 클래스와 객체들이 상호작용하고 책임을 분배하는 방법을 다루어, 객체 간의 통신과 협력을 효율적으로 만듭니다.


📝 행동 패턴별 핵심 특징

  • 책임 연쇄 (Chain of Responsibility)
    요청을 처리할 수 있는 기회를 여러 객체(처리자 체인)에게 부여하여, 요청을 보내는 객체와 받는 객체 간의 결합도를 낮춥니다.
  • 커맨드 (Command)
    요청(행동)을 객체로 캡슐화하여, 요청을 매개변수화하거나 큐에 저장, 로깅, 실행 취소 등을 지원합니다.
  • 인터프리터 (Interpreter)
    주어진 언어의 문법 표현을 정의하고, 그 문법 표현을 해석하는 해석기를 포함합니다.
  • 반복자 (Iterator)
    컬렉션(집합 객체)의 내부 표현을 노출하지 않고 그 요소들에 순차적으로 접근하는 방법을 제공합니다.
  • 중재자 (Mediator)
    객체들이 직접 상호작용하지 않고, 중앙에 위치한 중재자 객체를 통해서만 통신하도록 하여 객체 간의 복잡한 의존성을 줄입니다.
  • 메멘토 (Memento)
    객체의 내부 상태를 외부에 노출하지 않고 객체 외부로 저장(캡처)했다가 나중에 그 상태로 복원할 수 있도록 합니다.
  • 옵저버 (Observer)
    한 객체(주체)의 상태 변화에 따라 의존하는 여러 다른 객체(옵저버)들에게 자동으로 알림을 보내고 업데이트하도록 합니다.
  • 상태 (State)
    객체의 내부 상태에 따라 객체의 행동이 변경되도록 하여, 조건문을 줄이고 행동을 객체화합니다.
  • 전략 (Strategy)
    동일한 문제를 해결하는 다양한 알고리즘들을 정의하고 각각을 캡슐화하여, 런타임에 필요에 따라 알고리즘을 교체할 수 있도록 합니다.
  • 템플릿 메서드 (Template Method)
    알고리즘의 골격(틀)을 상위 클래스에서 정의하고, 일부 단계의 구현은 하위 클래스에게 위임하여 알고리즘의 구조는 유지하되 세부 구현을 변경할 수 있도록 합니다.
  • 방문자 (Visitor)
    객체 구조(요소 클래스)를 변경하지 않고, 그 구조의 요소(객체)에 대해 새로운 연산(기능)을 추가할 수 있도록 합니다.

📊 행동 패턴 요약 표

패턴 이름 핵심 기능 및 목적
책임 연쇄 (Chain of Responsibility) 요청 처리 위임 및 결합도 감소
커맨드 (Command) 요청(행동) 객체화 및 실행 취소, 로깅 지원
인터프리터 (Interpreter) 특정 언어의 문법 정의 및 해석
반복자 (Iterator) 컬렉션 내부 구조 노출 없이 요소 순차 접근
중재자 (Mediator) 객체 간 복잡한 상호작용 중앙 관리 (결합도 감소)
메멘토 (Memento) 객체 상태 저장 및 복원 (내부 노출 없이)
옵저버 (Observer) 1:N 상태 변화 알림 및 자동 업데이트
상태 (State) 객체 상태에 따른 행동 변화
전략 (Strategy) 알고리즘 캡슐화 및 런타임 교체
템플릿 메서드 (Template Method) 알고리즘 골격 정의 및 세부 단계 위임
방문자 (Visitor) 객체 구조 변경 없이 요소에 새로운 연산 추가

📊 GoF 디자인 패턴 23가지 전체 요약 표

다음 표는 23가지 GoF 디자인 패턴을 한눈에 볼 수 있도록 분류별로 핵심 기능과 목적을 요약한 것입니다.


분류 패턴 이름 핵심 기능 및 목적
생성 (Creational) 추상 팩토리 (Abstract Factory) 연관된 객체 패밀리(제품군) 생성
빌더 (Builder) 복잡한 객체 단계별 생성 및 표현 분리
팩토리 메서드 (Factory Method) 객체 생성 위임 (서브클래스가 결정)
프로토타입 (Prototype) 기존 객체 복사(클론)를 통한 새 객체 생성
싱글턴 (Singleton) 클래스의 단일 인스턴스 보장 및 전역 접근점
구조 (Structural) 어댑터 (Adapter) 인터페이스 불일치 해결 (변환)
브리지 (Bridge) 추상화와 구현 분리 및 독립적 확장
컴포지트 (Composite) 부분-전체 계층 표현 및 단일성 일치
데코레이터 (Decorator) 동적 책임(기능) 추가
퍼사드 (Facade) 서브시스템의 복잡한 인터페이스 단순화
플라이웨이트 (Flyweight) 대량 객체 공유를 통한 메모리 절약
프록시 (Proxy) 객체 접근 제어 또는 대리자 역할
행동 (Behavioral) 책임 연쇄 (Chain of Responsibility) 요청 처리 위임 및 결합도 감소
커맨드 (Command) 요청(행동) 객체화 및 실행 취소, 로깅 지원
인터프리터 (Interpreter) 특정 언어의 문법 정의 및 해석
반복자 (Iterator) 컬렉션 내부 구조 노출 없이 요소 순차 접근
중재자 (Mediator) 객체 간 복잡한 상호작용 중앙 관리 (결합도 감소)
메멘토 (Memento) 객체 상태 저장 및 복원 (내부 노출 없이)
옵저버 (Observer) 1:N 상태 변화 알림 및 자동 업데이트
상태 (State) 객체 상태에 따른 행동 변화
전략 (Strategy) 알고리즘 캡슐화 및 런타임 교체
템플릿 메서드 (Template Method) 알고리즘 골격 정의 및 세부 단계 위임
방문자 (Visitor) 객체 구조 변경 없이 요소에 새로운 연산 추가

이 글을 통해 각 GoF 디자인 패턴의 핵심 특징을 명확히 파악하고, 시험 대비 및 실제 개발에 효과적으로 활용하시기를 바랍니다. 꾸준히 반복 학습하며 자신만의 방식으로 패턴들을 정리해 나가는 것이 중요합니다! 🚀

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형