1. 디자인 패턴이란?

 

- 소프트웨어 디자인 과정에서 개발자들이 직면하는 문제들 대한 일반화된 해결책

- 재사용하는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 "개념"

- 많은 경우 상속과 다형성 개념을 이용해서 해결하는 듯

 

 

 

2. 왜 디자인패턴을 배워야 하는가?

 

- 디자인 패턴에 대해 공부하지 않아도 프로그래머로 일하는데 문제가 없는 경우가 많다

- 심지어 본인도 모르는 사이 이미 디자인 패턴을 적용해서 코드를 구현하고 있을 수도 있다

- 더 나아가 초보자에게, 혹은 추상화가 부족한 특정 언어들에게는 오히려 방해가 될 수 있다

- 그럼에도 디자인 패턴을 알면 뭐가 좋은가?

 

1) 소프트웨어 디자인의 일반적인 문제들에 대해 "시도되고 검증된" 해결책이다.

2) 팀원간의 의사소통을 더 효율적으로 할 수 있게 해주는 "공통언어"가 정의된다.

  - 만약 A상황에서는 B패턴을 사용하세요 라고 간단하게 말할 수 있게 됨

 

 

 

3. 패턴의 분류

 

- 디자인 패턴은 복잡성, 상세도 및 적용 범위에 따라 분류됨

1) 상위와 하위 설계 패턴으로 구분하는 '아키텍처 패턴'과 '이디엄 패턴'

2) 패턴의 의도와 목적에 따라 분류하는 '생성 패턴', '구조 패턴', '행동 패턴'

 

- 기본적인 하위설계 패턴인 이디엄, 상위설계 패턴인 아키텍처 패턴으로 나뉘기도 함

- 하위 설계패턴인 이디엄은 단일 프로그래밍 언어에만 적용 가능

- 상위 설계 패턴인 아키텍처 패턴은 거의 모든 언어로 구현할 수 있고 다른 패턴들과 달리 애플리케이션 전체구조(아키텍처)를 설계하는데 사용

 

- 생성 패턴들은 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘을 제공

- 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명

- 행동 패턴은 객체간의 효과적인 의사소통과 책임할당을 처리

 

보통 생성/구조/행동 패턴 3가지로 분류해서 사용하는 듯 함

 

 

 

4. 패턴의 종류

 

GoF 방식으로 분류한다면 생성패턴/구조패턴/행동패턴 3가지로 구분할 수 있다.

 

1) 생성 패턴(Creational Patterns)

  팩토리메소드(Factory Methods)

  - 추상 팩토리(Abstract Factory)

  - 빌더(Builder)

  프로토타입(Prototype)

  싱글턴(Singleton)

 

2) 구조 패턴(Structural Patterns)

  - 어댑터(Adapter)

  - 브릿지(Bridge)

  - 콤포지트(Composite)

  - 데코레이터(Decorator)

  - 퍼사드(Facade)

  - 플라이웨이트(Flyweight)

  - 프록시(Proxy)

 

3) 행동 패턴(Behavioral Patterns)

  - 역할 사슬(Chain of Responsibility)

  - 커맨드(Command)

  - 인터프리터(Interpreter)

  - 이터레이터(iterator)

  - 미디에이터(Mediator)

  - 메멘토(Memento)

  - 옵저버(Observer)

  - 스테이트(State)

  - 스트래티지(Strategy)

  - 템플릿 메서드(Template Method)

  - 비지터(Visitor)