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 디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제들을 해결하기 위한 검증된 솔루션 모음이다.
이 패턴들은 다음과 같은 핵심 개념을 바탕으로 한다:

  1. 디자인 패턴 (Design Pattern): 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적인 해결책을 의미한다.

  2. GoF(Gang of Four): Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 네 명의 저자를 지칭하며, 이들이 정리한 23 가지 디자인 패턴을 GoF 패턴이라고 한다.

  3. 패턴의 분류:

    • 생성 (Creational) 패턴: 객체 생성과 관련된 패턴으로, 객체 생성 과정을 캡슐화하여 유연성을 제공한다.
    • 구조 (Structural) 패턴: 클래스나 객체를 조합하여 더 큰 구조를 형성하는 패턴이다.
    • 행위 (Behavioral) 패턴: 객체 간의 상호작용과 책임 분배에 관한 패턴이다.
  4. 인터페이스 프로그래밍: " 구현이 아닌 인터페이스에 프로그래밍하라 " 는 원칙을 따른다. 이는 코드가 구체적인 클래스보다 추상 클래스나 인터페이스에 의존하도록 함으로써 유연성을 높인다.

  5. 상속보다 컴포지션: " 클래스 상속보다 객체 컴포지션을 선호하라 " 는 원칙을 강조한다. 상속은 부모 클래스의 구현에 자식 클래스가 종속되는 강한 결합을 만들지만, 컴포지션은 더 유연한 설계를 가능하게 한다.

  6. 캡슐화: 변경 가능성이 높은 부분을 캡슐화하여 시스템의 다른 부분에 영향을 주지 않도록 한다.

  7. 객체 간 결합도 최소화: 객체 간의 상호작용은 필요한 최소한으로 유지하여 시스템의 모듈성과 유연성을 향상시킨다.

  8. 단일 책임 원칙: 각 클래스는 하나의 책임만 가져야 한다. 이는 코드의 유지보수성과 재사용성을 높인다.

  9. 개방 - 폐쇄 원칙: 확장에는 열려 있고 수정에는 닫혀 있어야 한다. 즉, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 한다.

  10. 패턴 언어: 디자인 패턴은 개발자들 간의 의사소통을 위한 공통 어휘를 제공한다. 한 개발자가 " 팩토리 패턴 " 이나 " 싱글톤 " 과 같은 용어를 사용하면, 다른 개발자들은 즉시 그 구조와 의도를 이해할 수 있다.

  11. 문제 - 해결책 쌍: 각 패턴은 특정 문제 상황과 그에 대한 해결책을 함께 제시한다. 이 해결책은 실제 프로젝트에서 입증된 방법으로, 코드의 품질을 향상시킨다.

목적 및 필요성

GoF 디자인 패턴의 주요 목적은 소프트웨어 개발에서 반복적으로 발생하는 문제들에 대한 표준화된 해결책을 제공하는 것이다. 이러한 패턴을 사용함으로써 다음과 같은 이점을 얻을 수 있다:

  1. 코드 재사용성 향상: 검증된 디자인 패턴을 활용하면 같은 문제를 여러 번 해결하지 않아도 된다.
  2. 유지보수성 개선: 표준화된 구조를 따르면 코드가 더 이해하기 쉽고 수정하기 쉬워진다.
  3. 개발자 간 커뮤니케이션 향상: 공통된 용어와 개념을 사용함으로써 팀 내 의사소통이 원활해진다.
  4. 더 유연한 설계: 디자인 패턴은 변경에 대응하기 쉬운 유연한 구조를 제공한다.
  5. 검증된 해결책 활용: 이미 많은 개발자들이 테스트하고 검증한 해결책을 사용함으로써 실수를 줄일 수 있다.

주요 기능 및 역할

GoF 디자인 패턴은 소프트웨어 설계에서 다음과 같은 핵심 기능과 역할을 수행한다:

  1. 문제 해결 가이드: 복잡한 설계 문제에 대한 입증된 해결책을 제공한다.
  2. 코드 구조화: 코드를 체계적으로 구성하는 방법을 제시한다.
  3. 의사소통 도구: 개발자들이 설계 개념을 공유하는 데 사용할 수 있는 공통 어휘를 제공한다.
  4. 설계 지식 전파: 경험 많은 개발자들의 지식과 노하우를 체계화하여 전달한다.
  5. 코드 품질 향상: 잘 설계된 패턴을 적용함으로써 코드의 품질과 유지보수성을 높인다.

특징

GoF 디자인 패턴의 주요 특징은 다음과 같다:

  1. 언어 독립적: 다양한 객체지향 프로그래밍 언어에서 적용할 수 있다.
  2. 검증된 해결책: 실제 프로젝트에서 반복적으로 증명된 방법들이다.
  3. 추상화 수준: 구체적인 구현보다는 개념적인 수준에서 문제와 해결책을 다룬다.
  4. 구조화된 체계: 패턴들이 생성, 구조, 행동이라는 명확한 범주로 분류된다.
  5. 유연성과 확장성: 시스템이 변경과 확장에 더 잘 대응할 수 있도록 설계된다.

핵심 원칙

GoF 디자인 패턴은 다음과 같은 핵심 객체지향 원칙에 기반한다:

  1. 인터페이스에 대한 프로그래밍: 구현체가 아닌 인터페이스에 의존한다.
  2. 상속보다 컴포지션: 클래스 상속보다 객체 컴포지션을 선호한다.
  3. 캡슐화: 변경 가능성이 높은 부분을 캡슐화한다.
  4. 느슨한 결합: 객체 간의 의존성을 최소화한다.
  5. 단일 책임 원칙: 각 클래스는 하나의 책임만 가져야 한다.
  6. 개방 - 폐쇄 원칙: 확장에는 열려있고 수정에는 닫혀있어야 한다.

주요 원리

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 디자인 패턴을 적용할 때 다음과 같은 도전 과제가 있다:

  1. 적절한 패턴 선택: 특정 문제 상황에 가장 적합한 패턴을 선택하는 것은 경험과 지식을 필요로 한다.
  2. 패턴 오용 방지: 모든 문제를 패턴으로 해결하려는 ’ 골든 해머 ’ 증후군에 빠지지 않아야 한다.
  3. 패턴 간 상호작용 관리: 여러 패턴을 함께 사용할 때 발생할 수 있는 복잡성을 관리해야 한다.
  4. 팀 역량 차이: 팀원 간 패턴 이해도 차이로 인한 커뮤니케이션 문제가 발생할 수 있다.
  5. 현대 프로그래밍 패러다임과의 통합: 함수형 프로그래밍과 같은 현대적 패러다임과 전통적인 GoF 패턴을 조화롭게 통합해야 한다.
  6. 과도한 추상화 방지: 패턴 적용으로 인한 불필요한 추상화 계층이 생기지 않도록 해야 한다.
  7. 성능 최적화: 패턴 적용이 성능에 미치는 영향을 고려하고 필요 시 최적화해야 한다.

실무 적용 예시

패턴적용 예시설명
싱글톤 (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)비즈니스 객체를 감싸 로깅, 접근 제어, 감사 로직을 구현. 실제 객체 변경 없이 부가기능 확장 가능

시스템 다이어그램:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
                    +------------------+
                    |   클라이언트 UI   |
                    +------------------+
                             |
                +------------+-----------+
                |                        |
    +-------------------+    +----------------------+
    | 카탈로그 시스템    |    |    주문 관리 시스템    |
    | (컴포지트 패턴)    |    |     (상태 패턴)       |
    +-------------------+    +----------------------+
                                        |
                            +-----------+-----------+
                            |                       |
                +-----------------+     +------------------+
                |  결제 시스템     |     |   알림 시스템     |
                | (전략 패턴)      |     |  (옵저버 패턴)    |
                +-----------------+     +------------------+
                            |                       |
                +-----------------+     +------------------+
                |  할인 처리기     |     |  로깅 및 감사     |
                | (데코레이터 패턴) |     |  (프록시 패턴)    |
                +-----------------+     +------------------+

이 시나리오에서는 다양한 디자인 패턴이 서로 보완적으로 작동하며, 유연하고 확장 가능한 전자상거래 시스템을 구현한다. 각 패턴은 특정 문제 영역을 해결하면서 전체 시스템의 유지보수성과 확장성을 향상시킨다.

실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점

고려사항설명주의할 점
문제 분석실제 해결해야 할 문제를 명확히 이해문제를 패턴에 맞추려 하지 말고, 패턴을 문제에 맞춰 선택
단순성 유지가능한 한 단순한 해결책 우선 고려필요 이상으로 복잡한 패턴 적용 피하기
패턴 조합여러 패턴을 함께 사용하는 방법 고려과도한 패턴 조합은 코드 복잡성 증가
팀 이해도팀원들의 패턴 이해도 고려모든 팀원이 이해할 수 있는 수준의 패턴 선택
문서화적용한 패턴과 이유를 문서화문서화 없이 암묵적으로 패턴 적용 피하기
유지보수성장기적 유지보수 관점에서 평가단기적 편의보다 장기적 유지보수성 우선시
언어/프레임워크 특성사용 중인 언어/프레임워크 특성 고려언어가 이미 제공하는 기능을 중복 구현 피하기
테스트 가능성패턴 적용 후 테스트 용이성 고려테스트하기 어려운 구조 피하기
성능 영향패턴이 성능에 미치는 영향 평가중요한 성능 요구사항이 있는 부분에서는 신중히 적용
과용 방지필요한 곳에만 패턴 적용’ 디자인 패턴 과용 증후군 ’ 주의

최적화하기 위한 고려사항 및 주의할 점

고려사항설명주의할 점
간접 계층 최소화패턴 적용으로 인한 추가 계층 평가성능 중요 부분에서는 직접 접근 고려
지연 초기화필요할 때만 객체 생성하도록 구현모든 객체를 미리 생성하지 않도록 주의
캐싱 활용자주 사용되는 객체나 결과 캐싱메모리 사용량과 최신성 균형 유지
객체 풀링생성 비용이 큰 객체는 재사용 고려풀 크기와 관리 오버헤드 고려
리플렉션 사용 제한동적 패턴 구현 시 리플렉션 제한적 사용과도한 리플렉션은 성능 저하 초래
프로파일링패턴 적용 전후 성능 측정가정이 아닌 측정된 데이터로 판단
병목 지점 파악성능 병목이 되는 패턴 부분 파악전체 시스템에서 중요 부분에 집중
최적화 균형코드 품질과 성능 사이 균형 유지과도한 최적화로 코드 품질 저하 피하기
컴파일러 최적화 활용현대 컴파일러의 최적화 기능 이해과도한 수동 최적화보다 컴파일러 신뢰
벤치마킹실제 환경과 유사한 조건에서 테스트이론적 최적화보다 실제 성능 개선 측정

최신 동향

주제항목설명
패턴 진화함수형 패턴 통합전통적인 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)동일한 인터페이스를 통해 다양한 구현을 사용할 수 있는 능력

참고 및 출처