티스토리 뷰

GoF 디자인 패턴 총정리

🚀 GoF 디자인 패턴 (Design Patterns) 총정리

GoF(Gang of Four) 디자인 패턴은 소프트웨어 공학에서 반복적으로 발생하는 문제들을 해결하기 위한 검증된 설계 방식의 모음입니다. 이 패턴들은 코드의 재사용성, 유지보수성, 개발자 간의 의사소통 효율을 크게 향상시킵니다. 패턴은 크게 생성, 구조, 행위 세 가지로 분류됩니다.

1. 생성 패턴 (Creational Patterns)

객체의 생성 과정을 캡슐화하여, 코드로부터 구체적인 클래스 타입을 분리하고 유연성을 높입니다.

싱글톤 (Singleton)

클래스의 인스턴스가 오직 하나만 존재하도록 보장하고, 이 인스턴스에 대한 전역 접근점을 제공합니다.

학교의 교장실. 학교 전체에 교장실은 단 하나만 존재하며, 누구나 쉽게 찾아갈 수 있습니다.

팩토리 메서드 (Factory Method)

객체 생성의 뼈대는 부모가 정의하고, 실제 생성은 서브클래스가 결정하도록 위임합니다.

커피숍에서 "커피 주세요"라고 주문하면, '라떼 전문 바리스타'는 라떼를, '아메리카노 전문 바리스타'는 아메리카노를 만들어 줍니다.

추상 팩토리 (Abstract Factory)

관련 있는 객체들의 집합(Family)을 구체적인 클래스 지정 없이 한 번에 생성합니다.

가구 공장. '모던 스타일 공장'은 모던 스타일의 의자, 책상 세트를, '앤티크 스타일 공장'은 앤티크 스타일의 세트를 만듭니다.

빌더 (Builder)

복잡한 객체를 생성 과정과 표현 방법으로 분리하여, 단계별로 객체를 구성합니다.

샌드위치 가게. 빵, 재료, 소스를 단계별로 선택하여 자신만의 커스텀 샌드위치를 완성합니다.

프로토타입 (Prototype)

new 키워드 대신 기존 객체를 복제(Clone)하여 새로운 객체를 생성합니다.

세포 분열. 하나의 세포가 자신과 똑같은 유전 정보를 가진 세포를 복제하여 개체를 늘려나갑니다.

2. 구조 패턴 (Structural Patterns)

클래스나 객체들을 조합하여 더 크고 복잡한 구조를 형성합니다. 상속보다 합성을 통해 유연성을 확보합니다.

어댑터 (Adapter)

호환되지 않는 인터페이스를 가진 클래스들을 함께 동작할 수 있도록 변환해줍니다.

여행용 멀티 어댑터(돼지코). 220V 전자제품을 110V 환경에서 쓸 수 있도록 중간에서 맞춰줍니다.

브리지 (Bridge)

기능의 추상화와 구현을 분리하여, 서로 독립적으로 확장할 수 있게 합니다.

리모컨과 TV. TV(구현)가 삼성, LG 등으로 바뀌어도 리모컨(추상화) 사용법은 같습니다.

컴포지트 (Composite)

개별 객체와 객체 집합을 동일한 방식으로 다룰 수 있는 트리 구조를 만듭니다.

컴퓨터의 폴더와 파일. 폴더(집합)와 파일(개별) 모두 복사, 이동, 삭제가 가능합니다.

데코레이터 (Decorator)

기존 객체를 수정하지 않고, 동적으로 새로운 기능이나 책임을 추가합니다.

아이스크림에 토핑 추가. 기본 아이스크림에 원하는 토핑을 자유롭게 얹어 새로운 맛을 만듭니다.

퍼사드 (Facade)

복잡한 서브시스템에 대한 단순하고 통합된 인터페이스(창구)를 제공합니다.

컴퓨터의 '전원 버튼'. 버튼 하나로 복잡한 내부 부품들의 동작을 간단하게 제어합니다.

플라이웨이트 (Flyweight)

공유 가능한 상태를 분리하여, 수많은 객체를 효율적으로 관리하고 메모리 사용량을 줄입니다.

워드프로세서의 글자 '가'. '가'의 글꼴 정보는 한 번만 저장하고, 모든 '가'가 이 정보를 공유합니다.

프록시 (Proxy)

특정 객체에 대한 접근을 제어하기 위해 대리인(Proxy) 객체를 제공합니다.

신용카드. 실제 은행 계좌(실제 객체)에 직접 접근하는 대신, 카드를 통해 접근을 제어하고 부가 기능을 수행합니다.

3. 행위 패턴 (Behavioral Patterns)

객체들 간의 상호작용 및 책임 분배 방법을 다룹니다. 객체 간의 결합도를 낮추고 유연한 협력을 돕습니다.

책임 연쇄 (Chain of Responsibility)

요청을 처리할 객체들을 사슬처럼 연결하여, 요청이 해결될 때까지 차례로 넘깁니다.

회사의 결재 라인. 사원이 올린 기안이 대리-과장-부장 순으로 처리 기회를 갖습니다.

커맨드 (Command)

요청 자체를 객체로 캡슐화하여 요청의 저장, 로깅, 취소 등을 가능하게 합니다.

레스토랑 주문서. 웨이터의 주문(요청)이 주문서(객체)가 되어 주방에 전달됩니다.

이터레이터 (Iterator)

컬렉션 내부 구조를 노출하지 않고, 요소들에 순차적으로 접근하는 방법을 제공합니다.

TV 리모컨의 채널 버튼. 내부 구조를 몰라도 다음/이전 버튼으로 모든 채널을 탐색할 수 있습니다.

중재자 (Mediator)

객체 간의 복잡한 상호작용을 중재자 객체에 집중시켜 결합도를 낮춥니다.

항공 관제탑. 모든 비행기는 관제탑하고만 통신하여 복잡한 상호 통신을 피합니다.

메멘토 (Memento)

객체 내부 상태를 스냅샷처럼 저장해두고, 나중에 그 상태로 복원할 수 있게 합니다.

게임의 '세이브 포인트' 또는 문서 편집기의 'Undo(실행 취소)' 기능입니다.

옵저버 (Observer)

한 객체의 상태가 변하면, 그 객체에 의존하는 다른 객체들에게 자동으로 알림이 갑니다.

유튜브 채널 구독. 유튜버가 새 영상을 올리면 모든 구독자에게 알림이 갑니다.

상태 (State)

객체가 내부 상태가 바뀜에 따라 행위를 변경할 수 있게 합니다.

자판기. 동전 투입 여부(상태)에 따라 버튼이 활성화되는 등 행동이 달라집니다.

전략 (Strategy)

다양한 알고리즘(전략)들을 캡슐화하고, 필요할 때 서로 교체해서 사용할 수 있게 합니다.

지도 앱의 경로 찾기. '자동차', '대중교통', '도보' 경로(전략)를 선택하여 사용할 수 있습니다.

템플릿 메서드 (Template Method)

알고리즘의 뼈대는 부모가 정의하고, 일부 변하는 단계는 서브클래스가 구체화합니다.

라면 끓이기. 물 끓이고 스프 넣는 절차(템플릿)는 같지만, 계란 추가 여부(구체화)는 다릅니다.

방문자 (Visitor)

객체 구조는 변경하지 않으면서, 그 구조에 대한 새로운 연산(기능)을 추가합니다.

여행객(방문자)이 서울의 명소(객체 구조)를 방문하며 '사진 찍기' 등 새로운 활동(연산)을 합니다.

인터프리터 (Interpreter)

특정 언어의 문법을 정의하고, 그 문법으로 작성된 문장을 해석합니다.

악보. 작곡가가 정해진 문법으로 곡을 쓰면, 연주자(인터프리터)가 이를 해석해 연주합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함