GoF
GoF(Gang of Four) 디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제들에 대한 검증된 해결책을 제공한다. 1994 년 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 가 저술한 “Design Patterns: Elements of Reusable Object-Oriented Software” 에서 처음 소개되었다. 이 패턴들은 객체지향 소프트웨어 설계에서 재사용성, 확장성, 유지보수성을 향상시키는 데 중요한 역할을 한다.
GoF 패턴은 크게 생성 (Creational), 구조 (Structural), 행동 (Behavioral) 패턴으로 구분된다. 생성 패턴은 객체 생성 방식을 추상화하고, 구조 패턴은 클래스/객체 조합을 최적화하며, 행동 패턴은 객체 간 상호작용을 관리한다. 2025 년에는 AI 기반 자동 패턴 적용과 클라우드 네이티브 환경에서의 활용이 확대되고 있다.
핵심 개념
GoF 디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제들을 해결하기 위한 검증된 솔루션 모음이다.
이 패턴들은 다음과 같은 핵심 개념을 바탕으로 한다:
디자인 패턴 (Design Pattern): 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적인 해결책을 의미한다.
GoF(Gang of Four): Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 네 명의 저자를 지칭하며, 이들이 정리한 23 가지 디자인 패턴을 GoF 패턴이라고 한다.
패턴의 분류:
- 생성 (Creational) 패턴: 객체 생성과 관련된 패턴으로, 객체 생성 과정을 캡슐화하여 유연성을 제공한다.
- 구조 (Structural) 패턴: 클래스나 객체를 조합하여 더 큰 구조를 형성하는 패턴이다.
- 행위 (Behavioral) 패턴: 객체 간의 상호작용과 책임 분배에 관한 패턴이다.
인터페이스 프로그래밍: " 구현이 아닌 인터페이스에 프로그래밍하라 " 는 원칙을 따른다. 이는 코드가 구체적인 클래스보다 추상 클래스나 인터페이스에 의존하도록 함으로써 유연성을 높인다.
상속보다 컴포지션: " 클래스 상속보다 객체 컴포지션을 선호하라 " 는 원칙을 강조한다. 상속은 부모 클래스의 구현에 자식 클래스가 종속되는 강한 결합을 만들지만, 컴포지션은 더 유연한 설계를 가능하게 한다.
캡슐화: 변경 가능성이 높은 부분을 캡슐화하여 시스템의 다른 부분에 영향을 주지 않도록 한다.
객체 간 결합도 최소화: 객체 간의 상호작용은 필요한 최소한으로 유지하여 시스템의 모듈성과 유연성을 향상시킨다.
단일 책임 원칙: 각 클래스는 하나의 책임만 가져야 한다. 이는 코드의 유지보수성과 재사용성을 높인다.
개방 - 폐쇄 원칙: 확장에는 열려 있고 수정에는 닫혀 있어야 한다. 즉, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 한다.
패턴 언어: 디자인 패턴은 개발자들 간의 의사소통을 위한 공통 어휘를 제공한다. 한 개발자가 " 팩토리 패턴 " 이나 " 싱글톤 " 과 같은 용어를 사용하면, 다른 개발자들은 즉시 그 구조와 의도를 이해할 수 있다.
문제 - 해결책 쌍: 각 패턴은 특정 문제 상황과 그에 대한 해결책을 함께 제시한다. 이 해결책은 실제 프로젝트에서 입증된 방법으로, 코드의 품질을 향상시킨다.
목적 및 필요성
GoF 디자인 패턴의 주요 목적은 소프트웨어 개발에서 반복적으로 발생하는 문제들에 대한 표준화된 해결책을 제공하는 것이다. 이러한 패턴을 사용함으로써 다음과 같은 이점을 얻을 수 있다:
- 코드 재사용성 향상: 검증된 디자인 패턴을 활용하면 같은 문제를 여러 번 해결하지 않아도 된다.
- 유지보수성 개선: 표준화된 구조를 따르면 코드가 더 이해하기 쉽고 수정하기 쉬워진다.
- 개발자 간 커뮤니케이션 향상: 공통된 용어와 개념을 사용함으로써 팀 내 의사소통이 원활해진다.
- 더 유연한 설계: 디자인 패턴은 변경에 대응하기 쉬운 유연한 구조를 제공한다.
- 검증된 해결책 활용: 이미 많은 개발자들이 테스트하고 검증한 해결책을 사용함으로써 실수를 줄일 수 있다.
주요 기능 및 역할
GoF 디자인 패턴은 소프트웨어 설계에서 다음과 같은 핵심 기능과 역할을 수행한다:
- 문제 해결 가이드: 복잡한 설계 문제에 대한 입증된 해결책을 제공한다.
- 코드 구조화: 코드를 체계적으로 구성하는 방법을 제시한다.
- 의사소통 도구: 개발자들이 설계 개념을 공유하는 데 사용할 수 있는 공통 어휘를 제공한다.
- 설계 지식 전파: 경험 많은 개발자들의 지식과 노하우를 체계화하여 전달한다.
- 코드 품질 향상: 잘 설계된 패턴을 적용함으로써 코드의 품질과 유지보수성을 높인다.
특징
GoF 디자인 패턴의 주요 특징은 다음과 같다:
- 언어 독립적: 다양한 객체지향 프로그래밍 언어에서 적용할 수 있다.
- 검증된 해결책: 실제 프로젝트에서 반복적으로 증명된 방법들이다.
- 추상화 수준: 구체적인 구현보다는 개념적인 수준에서 문제와 해결책을 다룬다.
- 구조화된 체계: 패턴들이 생성, 구조, 행동이라는 명확한 범주로 분류된다.
- 유연성과 확장성: 시스템이 변경과 확장에 더 잘 대응할 수 있도록 설계된다.
핵심 원칙
GoF 디자인 패턴은 다음과 같은 핵심 객체지향 원칙에 기반한다:
- 인터페이스에 대한 프로그래밍: 구현체가 아닌 인터페이스에 의존한다.
- 상속보다 컴포지션: 클래스 상속보다 객체 컴포지션을 선호한다.
- 캡슐화: 변경 가능성이 높은 부분을 캡슐화한다.
- 느슨한 결합: 객체 간의 의존성을 최소화한다.
- 단일 책임 원칙: 각 클래스는 하나의 책임만 가져야 한다.
- 개방 - 폐쇄 원칙: 확장에는 열려있고 수정에는 닫혀있어야 한다.
주요 원리
GoF 디자인 패턴은 객체지향 설계 원칙을 바탕으로 작동한다.
각 패턴은 특정 문제 상황에서 어떻게 클래스와 객체를 구성하고 상호작용시킬지에 대한 청사진을 제공한다.
GoF 디자인 패턴은 23 개의 패턴으로 구성되며, 크게 3 가지 카테고리로 분류된다:
구분 | 생성 패턴 (Creational) | 구조 패턴 (Structural) | 행위 패턴 (Behavioral) |
---|---|---|---|
정의 | 객체 생성 로직을 캡슐화하고 객체 생성 방식의 다양성을 제공하는 패턴 | 여러 객체와 클래스를 조합해 더 큰 구조를 유연하게 구성하는 패턴 | 객체 간의 상호작용, 책임 분배, 알고리즘 변경을 유연하게 만드는 패턴 |
목적 | 객체 생성의 책임을 분리하여 코드 재사용성과 확장성을 높임 | 시스템 구조를 유연하고 효율적으로 설계하며, 객체 간 결합도를 줄임 | 객체 간의 소통과 협력을 체계화하여 확장성과 유지보수성을 향상 |
사용 시기 | - 객체 생성 과정이 복잡할 때 - 동일 객체를 반복적으로 생성해야 할 때 - 생성 방식의 변경 가능성이 클 때 - 생성 로직을 외부로 분리하고 싶을 때 | - 인터페이스 통합 또는 기능 확장이 필요할 때 - 시스템의 계층 구조 설계가 요구될 때 - 런타임에 객체 구조를 변경하고자 할 때 | - 객체 간의 메시지 교환이 복잡할 때 - 요청 처리 로직의 재사용이 필요할 때 - 작업 실행/취소/기록 기능이 필요할 때 - 이벤트 기반 통신 구조가 요구될 때 |
작동 흐름 | 클라이언트 요청 → 생성 패턴 (추상 팩토리, 빌더 등) → 구체 객체 생성 및 반환 | 클라이언트 → 인터페이스 → 어댑터/데코레이터/퍼사드 등 → 실제 구현체 | 클라이언트 → 전략/템플릿 메소드/옵저버 등 → 특정 행동 수행 |
장점 | - 객체 생성 유연성 증가 - 코드 중복 감소 - 결합도 감소 - 테스트 용이성 향상 | - 구조 확장 용이 - 복잡도 분산 - 유지보수성 향상 - 인터페이스 일관성 확보 | - 책임 분리 명확 - 로직 재사용 가능 - 유연한 알고리즘 변경 - 객체 간 협업 구조 최적화 |
주의사항 | - 생성 책임의 과도한 분산 주의 - 팩토리 남용 시 코드 추적이 어려움 - 성능 이슈 발생 가능 | - 불필요한 계층화 주의 - 인터페이스 남용으로 오히려 복잡도 증가 가능 - 클래스 설계 초기 단계에서 신중한 구조 고려 필요 | - 성능 병목 요소 주의 (예: Observer 과도 사용) - 순환 참조 발생 방지 - 상태 관리 일관성 유지 필수 |
분류에 따른 종류 및 유형
카테고리 | 패턴 | 설명 |
---|---|---|
생성 (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) | 객체 상태를 저장/복원하여 Undo 기능 등 제공 | |
옵저버 (Observer) | 상태 변화 시 관련 객체에 자동 통지 (일대다 관계) | |
스테이트 (State) | 상태에 따라 객체 행동을 캡슐화하고 조건문 제거 | |
전략 (Strategy) | 알고리즘을 캡슐화하여 동적으로 교체 가능 | |
템플릿 메소드 (Template Method) | 알고리즘 골격 정의, 일부 구현은 서브클래스에 위임 | |
비지터 (Visitor) | 구조 변경 없이 새로운 연산 추가 가능 |
도전 과제
GoF 디자인 패턴을 적용할 때 다음과 같은 도전 과제가 있다:
- 적절한 패턴 선택: 특정 문제 상황에 가장 적합한 패턴을 선택하는 것은 경험과 지식을 필요로 한다.
- 패턴 오용 방지: 모든 문제를 패턴으로 해결하려는 ’ 골든 해머 ’ 증후군에 빠지지 않아야 한다.
- 패턴 간 상호작용 관리: 여러 패턴을 함께 사용할 때 발생할 수 있는 복잡성을 관리해야 한다.
- 팀 역량 차이: 팀원 간 패턴 이해도 차이로 인한 커뮤니케이션 문제가 발생할 수 있다.
- 현대 프로그래밍 패러다임과의 통합: 함수형 프로그래밍과 같은 현대적 패러다임과 전통적인 GoF 패턴을 조화롭게 통합해야 한다.
- 과도한 추상화 방지: 패턴 적용으로 인한 불필요한 추상화 계층이 생기지 않도록 해야 한다.
- 성능 최적화: 패턴 적용이 성능에 미치는 영향을 고려하고 필요 시 최적화해야 한다.
실무 적용 예시
패턴 | 적용 예시 | 설명 |
---|---|---|
싱글톤 (Singleton) | 데이터베이스 연결 관리자 | 애플리케이션 내에서 단일 데이터베이스 연결 인스턴스를 유지하여 자원 효율성 향상 |
팩토리 메소드 (Factory Method) | UI 컴포넌트 생성 | 다양한 UI 스타일 (테마) 에 따라 적절한 컴포넌트를 생성하는 패턴 구현 |
옵저버 (Observer) | 이벤트 처리 시스템 | 사용자 액션이나 시스템 이벤트 발생 시 여러 컴포넌트에 알림 전달 |
전략 (Strategy) | 결제 처리 시스템 | 신용카드, 페이팔, 암호화폐 등 다양한 결제 방식을 전략 패턴으로 구현 |
데코레이터 (Decorator) | 텍스트 포맷팅 | 기본 텍스트에 볼드, 이탤릭, 색상 등의 포맷팅을 동적으로 추가 |
어댑터 (Adapter) | 레거시 시스템 통합 | 오래된 API 를 새로운 시스템에 통합할 때 인터페이스 변환 |
컴포지트 (Composite) | 파일 시스템 구현 | 파일과 디렉토리를 동일한 인터페이스로 처리하는 구조 설계 |
프록시 (Proxy) | 이미지 로딩 최적화 | 고해상도 이미지를 필요할 때만 로드하는 지연 로딩 구현 |
커맨드 (Command) | 트랜잭션 관리 | 실행, 롤백, 복구 등이 가능한 트랜잭션 시스템 구현 |
템플릿 메소드 (Template Method) | 데이터 처리 파이프라인 | 데이터 로드, 변환, 저장의 골격은 유지하되 각 단계의 구체적 구현을 확장 |
활용 사례
사례 1
전자상거래 애플리케이션에서의 GoF 디자인 패턴 활용 시나리오
전자상거래 플랫폼은 다양한 디자인 패턴을 활용하여 효율적이고 유연한 구조로 구현할 수 있다.
아래는 주요 기능별로 적용 가능한 패턴들이다:
시스템 영역 | 적용 패턴 | 적용 방식 설명 |
---|---|---|
상품 카탈로그 관리 | 컴포지트 패턴 (Composite Pattern) | 카테고리와 상품을 동일한 인터페이스로 처리하여 트리 구조처럼 구성. 클라이언트는 개별 항목 또는 그룹을 동일하게 다룸 |
결제 시스템 | 전략 패턴 (Strategy Pattern) | 다양한 결제 방식을 전략으로 캡슐화. 동일한 처리 인터페이스로 동작하며, 새로운 결제 방식 추가 시 기존 코드에 영향 없음 |
주문 처리 | 상태 패턴 (State Pattern) | 주문 상태 (생성됨, 결제됨 등) 를 별도 클래스로 분리. 상태에 따라 행동을 변경하며, 상태 전이 관리가 명확 |
알림 시스템 | 옵저버 패턴 (Observer Pattern) | 주문 상태 변경 시 다수의 리스너 (고객, 판매자 등) 에게 알림. 알림 채널 추가가 용이하고 느슨한 결합 구조 유지 |
할인 정책 | 데코레이터 패턴 (Decorator Pattern) | 다양한 할인 로직을 기본 가격 계산에 동적으로 조합. 코드 수정 없이 새로운 할인 규칙 추가 가능 |
로깅 및 감사 | 프록시 패턴 (Proxy Pattern) | 비즈니스 객체를 감싸 로깅, 접근 제어, 감사 로직을 구현. 실제 객체 변경 없이 부가기능 확장 가능 |
시스템 다이어그램:
|
|
이 시나리오에서는 다양한 디자인 패턴이 서로 보완적으로 작동하며, 유연하고 확장 가능한 전자상거래 시스템을 구현한다. 각 패턴은 특정 문제 영역을 해결하면서 전체 시스템의 유지보수성과 확장성을 향상시킨다.
실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점
고려사항 | 설명 | 주의할 점 |
---|---|---|
문제 분석 | 실제 해결해야 할 문제를 명확히 이해 | 문제를 패턴에 맞추려 하지 말고, 패턴을 문제에 맞춰 선택 |
단순성 유지 | 가능한 한 단순한 해결책 우선 고려 | 필요 이상으로 복잡한 패턴 적용 피하기 |
패턴 조합 | 여러 패턴을 함께 사용하는 방법 고려 | 과도한 패턴 조합은 코드 복잡성 증가 |
팀 이해도 | 팀원들의 패턴 이해도 고려 | 모든 팀원이 이해할 수 있는 수준의 패턴 선택 |
문서화 | 적용한 패턴과 이유를 문서화 | 문서화 없이 암묵적으로 패턴 적용 피하기 |
유지보수성 | 장기적 유지보수 관점에서 평가 | 단기적 편의보다 장기적 유지보수성 우선시 |
언어/프레임워크 특성 | 사용 중인 언어/프레임워크 특성 고려 | 언어가 이미 제공하는 기능을 중복 구현 피하기 |
테스트 가능성 | 패턴 적용 후 테스트 용이성 고려 | 테스트하기 어려운 구조 피하기 |
성능 영향 | 패턴이 성능에 미치는 영향 평가 | 중요한 성능 요구사항이 있는 부분에서는 신중히 적용 |
과용 방지 | 필요한 곳에만 패턴 적용 | ’ 디자인 패턴 과용 증후군 ’ 주의 |
최적화하기 위한 고려사항 및 주의할 점
고려사항 | 설명 | 주의할 점 |
---|---|---|
간접 계층 최소화 | 패턴 적용으로 인한 추가 계층 평가 | 성능 중요 부분에서는 직접 접근 고려 |
지연 초기화 | 필요할 때만 객체 생성하도록 구현 | 모든 객체를 미리 생성하지 않도록 주의 |
캐싱 활용 | 자주 사용되는 객체나 결과 캐싱 | 메모리 사용량과 최신성 균형 유지 |
객체 풀링 | 생성 비용이 큰 객체는 재사용 고려 | 풀 크기와 관리 오버헤드 고려 |
리플렉션 사용 제한 | 동적 패턴 구현 시 리플렉션 제한적 사용 | 과도한 리플렉션은 성능 저하 초래 |
프로파일링 | 패턴 적용 전후 성능 측정 | 가정이 아닌 측정된 데이터로 판단 |
병목 지점 파악 | 성능 병목이 되는 패턴 부분 파악 | 전체 시스템에서 중요 부분에 집중 |
최적화 균형 | 코드 품질과 성능 사이 균형 유지 | 과도한 최적화로 코드 품질 저하 피하기 |
컴파일러 최적화 활용 | 현대 컴파일러의 최적화 기능 이해 | 과도한 수동 최적화보다 컴파일러 신뢰 |
벤치마킹 | 실제 환경과 유사한 조건에서 테스트 | 이론적 최적화보다 실제 성능 개선 측정 |
최신 동향
주제 | 항목 | 설명 |
---|---|---|
패턴 진화 | 함수형 패턴 통합 | 전통적인 GoF 패턴과 함수형 프로그래밍 패러다임의 융합이 증가하고 있습니다. |
현대화 | 모던 언어 최적화 | TypeScript, Kotlin, Rust 등 현대 언어에 맞게 패턴이 재해석되고 있습니다. |
마이크로서비스 | 분산 패턴 | 마이크로서비스 아키텍처에 적합한 분산 시스템 패턴으로 GoF 패턴이 확장되고 있습니다. |
리액티브 시스템 | 비동기 패턴 | 비동기 및 리액티브 프로그래밍을 위한 패턴 변형이 등장하고 있습니다. |
AI 통합 | 지능형 패턴 | AI 와 머신러닝을 적용한 지능형 디자인 패턴이 연구되고 있습니다. |
경량화 | 간소화된 패턴 | 복잡한 엔터프라이즈 시스템보다 경량화된 웹/모바일 환경에 맞는 패턴 간소화가 진행 중입니다. |
도구 지원 | 패턴 자동화 | IDE 와 코드 생성 도구에서 패턴 적용을 자동화하는 기능이 발전하고 있습니다. |
주제와 관련하여 주목할 내용
주제 | 항목 | 설명 |
---|---|---|
패턴 언어 확장 | 도메인 특화 패턴 | 특정 도메인 (금융, 헬스케어, 게임 등) 에 최적화된 패턴 언어가 발전하고 있습니다. |
안티패턴 | 패턴 오용 사례 | GoF 패턴의 일반적인 오용 사례와 안티패턴에 대한 연구가 활발합니다. |
컨텍스트 인식 | 상황별 패턴 선택 | 프로젝트 규모, 팀 구성, 기술 스택에 따른 적절한 패턴 선택 가이드라인이 중요해지고 있습니다. |
지속 가능성 | 장기 유지보수 | 단기 효율성보다 장기 유지보수성을 고려한 패턴 적용이 강조되고 있습니다. |
교육 방법론 | 패턴 학습 개선 | 디자인 패턴을 더 효과적으로 가르치고 학습하기 위한 교육 방법론이 발전하고 있습니다. |
형식 검증 | 패턴 정확성 | 형식 방법론을 사용하여 패턴 구현의 정확성을 검증하는 연구가 진행 중입니다. |
생성형 AI | 패턴 자동 적용 | 생성형 AI 를 활용한 코드 분석 및 패턴 자동 적용 기술이 등장하고 있습니다. |
추가 학습 내용
카테고리 | 주제 | 설명 |
---|---|---|
패턴 이론 | 패턴 언어 | 크리스토퍼 알렉산더의 패턴 언어 개념과 소프트웨어 디자인 패턴의 연관성 |
패턴 확장 | 엔터프라이즈 패턴 | 마틴 파울러의 엔터프라이즈 애플리케이션 아키텍처 패턴 |
동시성 패턴 | 병렬 프로그래밍과 동시성을 위한 디자인 패턴 | |
분산 시스템 패턴 | 마이크로서비스 아키텍처와 분산 시스템을 위한 패턴 | |
함수형 패턴 | 함수형 프로그래밍의 디자인 패턴 | |
패턴 적용 | 리팩토링 | 기존 코드를 패턴을 적용하여 리팩토링하는 방법 |
테스트 주도 개발과 패턴 | TDD 환경에서 패턴을 적용하는 방법 | |
패턴 구현 | 언어별 구현 | 다양한 프로그래밍 언어에서의 GoF 패턴 구현 방법 |
패턴 검증 | 패턴 메트릭스 | 패턴 적용의 효과를 측정하는 방법 |
관련 분야 및 추가 학습 주제
카테고리 | 주제 | 설명 |
---|---|---|
아키텍처 | 클린 아키텍처 | 로버트 C. 마틴의 클린 아키텍처와 GoF 패턴의 통합 |
아키텍처 | 헥사고날 아키텍처 | 포트와 어댑터 패턴을 중심으로 한 헥사고날 아키텍처 |
방법론 | DDD(도메인 주도 설계) | 에릭 에반스의 도메인 주도 설계와 패턴 적용 |
방법론 | SOLID 원칙 | 객체지향 설계의 5 가지 기본 원칙과 패턴의 관계 |
기술 | 반응형 프로그래밍 | 반응형 패러다임에서의 디자인 패턴 적용 |
기술 | 마이크로서비스 | 마이크로서비스 아키텍처에서의 패턴 활용 |
도구 | 정적 분석 | 코드 품질과 패턴 적용을 검증하는 정적 분석 도구 |
학문 | 컴퓨터 과학 이론 | 알고리즘, 자료구조와 디자인 패턴의 관계 |
실무 | 케이스 스터디 | 다양한 산업 분야에서의 디자인 패턴 적용 사례 |
용어 정리
용어 | 설명 |
---|---|
GoF (Gang of Four) | 디자인 패턴을 정리한 4 인의 저자 집단. 이들이 정리한 23 가지 패턴을 “GoF 패턴 " 이라 부름 |
Creational Pattern | 객체 생성 관련 설계 패턴 (예: Factory, Singleton) |
Structural Pattern | 클래스나 객체의 조합을 다루는 패턴 (예: Adapter, Decorator) |
Behavioral Pattern | 객체 간의 상호작용을 정의하는 패턴 (예: Observer, Strategy) |
SOLID | 객체 지향 설계의 5 가지 원칙 (SRP, OCP, LSP, ISP, DIP) |
디자인 패턴 (Design Pattern) | 소프트웨어 설계에서 반복적으로 발생하는 문제에 대한 일반적인 해결책 |
갱 오브 포 (Gang of Four) | 디자인 패턴을 정리한 책 “Design Patterns: Elements of Reusable Object-Oriented Software” 의 저자 4 명 (에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스) |
생성 패턴 (Creational Pattern) | 객체 생성 메커니즘을 다루는 디자인 패턴 |
구조 패턴 (Structural Pattern) | 클래스와 객체의 구성을 다루는 디자인 패턴 |
행동 패턴 (Behavioral Pattern) | 객체 간의 상호작용과 책임 분배를 다루는 디자인 패턴 |
인터페이스 (Interface) | 객체가 수행할 수 있는, 그리고 다른 객체가 요청할 수 있는 동작의 집합을 정의 |
캡슐화 (Encapsulation) | 객체의 상태와 행동을 하나로 묶고, 실제 구현은 외부에서 볼 수 없게 하는 개념 |
상속 (Inheritance) | 기존 클래스의 특성을 이어받는 새로운 클래스를 정의하는 메커니즘 |
컴포지션 (Composition) | 다른 객체의 참조를 가짐으로써 새로운 기능을 구성하는 설계 방식 |
다형성 (Polymorphism) | 동일한 인터페이스를 통해 다양한 구현을 사용할 수 있는 능력 |
참고 및 출처
- Gang of Four Design Patterns - Spring Framework Guru
- Gang of Four (GOF) Design Patterns - GeeksforGeeks
- 디자인 패턴 - 위키백과
- Introduction to Gang Of Four(GoF) Design Patterns - GeeksforGeeks
- Understanding the Gang of Four (GoF) Design Patterns
- Design Patterns and Refactoring
- Design Patterns Overview - TutorialsPoint
- Wikipedia - GoF Design Patterns
- Refactoring.Guru – Design Patterns
- Martin Fowler - Patterns of Enterprise Application Architecture
- Baeldung - Design Patterns in Java
- UML 다이어그램 시각화 - Visual Paradigm
- GoF 디자인 패턴 기본 개념
- 2025 AI 기반 패턴 적용 트렌드
- GoF 패턴의 실무 적용 사례