PMDEXIT 프로젝트 용어사전

GoF 디자인 패턴

Gang of Four Patterns · GoF

생성·구조·행위 23개로 정리된 객체지향 설계 패턴의 고전.

GoF 디자인 패턴이란

GoF(Gang of Four) 디자인 패턴은 객체지향 설계에서 반복적으로 마주치는 문제와 그에 대한 검증된 해법을 23개의 형태로 정리한 고전적 묶음이다. 네 명의 저자가 함께 정리했다는 데서 이름이 유래했으며, 이후 객체지향 설계 어휘의 사실상 공통 기준이 되었다.

패턴은 특정 언어나 프레임워크에 종속되지 않는 설계 수준의 지혜로, 구조를 어떻게 짜야 변경에 강한 코드가 되는지를 압축해 담는다. 개발자들이 같은 패턴 이름으로 의도를 빠르게 주고받을 수 있다는 점이 큰 가치다.

싱글턴팩토리어댑터프록시옵서버전략GoF 23패턴생성 패턴구조 패턴행위 패턴
GoF 패턴 세 갈래 분류

생성·구조·행위의 세 갈래

23개 패턴은 목적에 따라 크게 세 부류로 나뉜다. 생성 패턴은 객체를 만드는 과정을 캡슐화해, 무엇을 어떻게 생성할지의 결정을 유연하게 다룬다.

구조 패턴은 클래스와 객체를 조합해 더 큰 구조를 만들면서도 결합을 느슨하게 유지하는 방법을 다룬다. 행위 패턴은 객체들 사이의 책임 분배와 상호작용, 즉 알고리즘과 흐름의 위임을 다룬다.

이 세 축은 설계에서 마주치는 문제를 분류하는 직관적 지도 역할을 한다.

대표 패턴의 쓰임

생성 분류의 싱글턴은 인스턴스를 하나로 제한하고, 팩토리 계열은 생성 책임을 별도 지점으로 옮긴다. 구조 분류의 어댑터는 호환되지 않는 인터페이스를 잇고, 프록시는 실제 객체에 대한 접근을 대리한다.

행위 분류의 옵서버는 상태 변화를 구독자에게 전파하고, 전략은 교체 가능한 알고리즘을 캡슐화한다. 이러한 패턴들은 널리 쓰이는 프레임워크의 내부 곳곳에 녹아 있어, 패턴을 알면 익숙하지 않은 코드베이스의 의도도 빠르게 읽어낼 수 있다.

분류다루는 문제대표 패턴
생성객체 생성 캡슐화싱글턴·팩토리
구조조합·느슨한 결합어댑터·프록시
행위책임 분배·위임옵서버·전략
분류별 목적과 쓰임

MVC와 패턴의 결합

GoF 패턴은 단독으로 쓰이기보다 더 큰 구조 안에서 서로 맞물려 동작할 때 힘을 발휘한다. 대표적으로 화면·로직·데이터를 분리하는 MVC 패턴은 옵서버, 전략, 컴포지트 같은 여러 GoF 패턴을 조합해 구성된 복합 구조로 이해할 수 있다.

즉 GoF 패턴은 아키텍처 수준의 큰 골격을 떠받치는 부품 어휘에 해당한다. 이 부품들을 적절히 엮어야 변경에 유연하면서도 일관된 설계가 완성된다.

패턴은 목적이 아니다

패턴을 많이 적용했다는 사실 자체가 좋은 설계를 보장하지는 않는다. 문제의 맥락과 무관하게 패턴을 끼워 넣으면 오히려 불필요한 추상화 계층이 늘어나 코드를 읽기 어렵게 만든다.

패턴은 변경이 예상되는 지점에서 그 변경을 흡수하기 위한 수단일 뿐, 그 자체가 목표가 아니다. 따라서 어떤 변화가 실제로 일어날지를 먼저 가늠하고, 그 변화에 대응하는 패턴을 선택적으로 적용하는 절제가 요구된다.

단순한 문제에는 단순한 구조가 가장 좋은 설계인 경우가 많으며, 패턴의 남용은 유지보수를 돕기는커녕 새 합류자의 이해를 가로막는 비용으로 돌아온다.

오늘날의 가치

언어와 패러다임이 발전하면서 일부 패턴은 언어 기능으로 흡수되어 명시적 구현이 줄기도 했다. 함수를 일급으로 다루는 언어에서는 전략이나 명령 패턴이 별도 클래스 없이 간결하게 표현되는 식이다.

그럼에도 GoF 패턴이 제시한 분류 체계와 설계 어휘는 여전히 유효하다. 이름만으로 구조의 의도를 전달하는 공통 언어로서, 협업과 코드 리뷰, 설계 토론의 효율을 높이기 때문이다.

패턴의 형식을 외우는 일보다, 각 패턴이 어떤 변경에 대비하려는지를 이해하는 것이 실무에서 더 오래 남는 자산이 된다.

관련 용어