반응형
디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 solution이다. 이는 재사용할 수 있는 코드 조각같은 것들이 아니고, 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이다.
패턴은 알고리즘과 혼동되곤 하는데, 둘 다 어떤 문제를 해결하기 위해 따라야 할 일련의 절차를 정의하지만, 패턴은 알고리즘보다 더 상위 수준의 설명을 의미한다. 즉, 알고리즘을 요리에 대한 레시피에 비유한다면, 패턴은 다이닝 코스 구성으로 비유할 수 있다.
디자인 패턴은 Creational Pattern(생성 패턴), Structural Pattern(구조 패턴), Behavioral Pattern(행동 패턴) 3가지로 구분 되며 종류는 다음과 같다.
Creational Pattern | Structural Pattern | Behavioral Pattern |
Singleton | Adaptor | Command |
Abstract Factory | Composite | Interpreter |
Factory Method | Decorator | Iterator |
Builder | Facade | Mediator |
Prototype | Flyweight | Memento |
Proxy | Observer | |
State | ||
Strategy | ||
Template Method |
디자인 패턴을 배워야 하는 이유
사실 패턴에 대해 알지 못해도 개발자로 일 할 수 있고, 이미 그런 사람들이 있을 수 있다. 혹은 자신도 모르게 일부 패턴을 구현했을 수도 있다. 그러나, 왜 패턴을 학습해야 하는지 다음과 같이 정리했다.
- 디자인 패턴은 SW 디자인의 일반적인 문제들에 대해 검증된 해결책들을 모은 것이며, 이러한 패턴들을 배우게 되면 객체지향 디자인의 원칙들을 사용해서 많은 종류의 문제들을 해결하는 방법을 배울 수 있다.
- 팀원과의 효율적인 의사소통에 사용할 수 있는 공통 언어를 정의한다.
예를 들어 팀이 디자인 패턴을 이해하고 있다면, 업무중 "그 문제는 싱글턴을 사용하세요"라고 한다면 모두가 그 말을 이해하고 더이상 설명할 필요가 없을 것이다.
주의 사항
- 프로젝트의 맥락에 따라 적용하지 않고 "문자 그대로" 구현하는 지양해야 할것이다.
- 부당한 사용
"망치만 있으면 모든 것이 못처럼 보인다"라는 말이 있다.
패턴을 갓 배운 후, 더 간단하게 문제가 해결 되는 상황임에도 불구하고 모든 곳에 패턴을 적용하려고 하는 것을 지양해야 할것이다.