자주 나오는 설계 문제에 검증된 해법을 이름 붙여 정리해둔 것. 라이브러리처럼 가져다 쓰는 코드가 아니라 구조를 두고 나누는 합의된 어휘다. “여기 팩토리 쓰자”는 한마디로 설명이 끝나는 것이 패턴의 가장 큰 효용이다.

달라지는 부분과 달라지지 않는 부분

애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리하여 나머지 코드에 영향을 주지 않도록 캡슐화한다.

대부분의 패턴이 이 한 문장의 변주다. 템플릿 메서드 패턴은 달라지는 단계만 자식에게 맡기고, 팩토리 메서드 패턴은 달라지는 생성을 서브클래스로 미루고, 데코레이터 패턴은 달라지는 기능을 감싸는 층으로 뺀다.

GoF의 세 갈래

GoF(Gang of Four)가 정리한 23개가 기준이고, 목적에 따라 생성과 구조와 행위 셋으로 나뉜다. 이 저장소에 있는 것으로 보면 생성에 싱글톤 패턴팩토리 메서드 패턴, 빌더 패턴이, 구조에 데코레이터 패턴이, 행위에 템플릿 메서드 패턴이 든다.

패턴을 먼저 정할 때

패턴을 외우는 것이 목적이 아니다. 문제에서 출발해야 한다. “이 상황에 어떤 패턴을 쓸까”가 아니라 “이 문제가 있는데 마침 그 해법에 이름이 있다”는 순서다.

패턴을 먼저 정해놓고 코드를 끼워 맞추면 필요 없는 추상화가 생긴다. 좋은 객체에서 사칙연산마다 클래스를 만드는 것이 지나친 분리인 것과 같은 이야기다.

참고

세 갈래가 각각 무엇에 관한 것인지는 원본에 없다. 원저자 넷이 직접 쓴 회고 글이 “이 책이 다루는 패턴은 세 갈래로 나뉜다. 객체를 만드는 일에 관한 생성 패턴, 객체와 클래스가 서로 어떤 관계에 놓이는지에 관한 구조 패턴, 클래스와 객체 사이에 행위와 책임을 어떻게 나누는지에 관한 행위 패턴”이라고 적는다. Gamma, Helm, Johnson, Vlissides, A Look Back: Why We Wrote Design Patterns

관련

출처