디자인 패턴은 프로그램 설계 과정에서 자주 마주치는 문제를 객체 간 관계를 통해 해결하도록 정형화‑추상화해 놓은 ‘하나의 규약’이다.
거대한 코드베이스(수만 줄짜리 파일)를 모듈화하고, 재사용성과 유지보수성을 높이는 데 중추적 역할을 한다.
“어떠한 프레임워크·라이브러리의 토대가 되는 것이 바로 디자인 패턴이다.”
예를 들어 Node.js 인증 미들웨어인 Passport는 “전략(Strategy) 패턴” 위에서 구축됐다.
각각의 로그인 방식(로컬, JWT, OAuth 등)을 독립된 ‘전략’ 객체로 분리해, 애플리케이션 전체 구조를 건드리지 않고도 새로운 인증 방식을 끼워 넣을 수 있게 한다.
| 분류 | 핵심 목적 | 대표 패턴 |
|---|---|---|
| 생성(Creational) 패턴 | 객체 생성 과정을 추상화·캡슐화해 유연성과 재사용성을 확보한다 | 싱글턴, 팩토리 메서드, 추상 팩토리, 빌더, 프로토타입 |
| 구조(Structural) 패턴 | 클래스·객체를 조합해 더 큰 구조를 만들면서도 결합도를 낮춘다 | 어댑터, 브리지, 컴포지트, 데코레이터, 퍼사드, 프록시, 플라이웨이트 |
| 행동(Behavioral) 패턴 | 객체 간 책임 분배·커뮤니케이션 방식을 정의한다 | 전략, 옵저버, 커맨드, 스테이트, 템플릿 메서드, 이터레이터, 체인 오브 리스폰서빌리티, 미디에이터, 비지터, 인터프리터, 메멘토 |
아래에서 각 분류의 개념과 예시를 간단히 살펴본다.
createElement, SQL query builder) 디자인 패턴은 “은총알”이 아니다.
하지만 문제 유형을 빠르게 분류하고, 검증된 설계 아이디어를 끌어다 쓰는 강력한 도구임은 분명하다.
새로운 프레임워크나 라이브러리를 탐구할 때도, 그 밑바탕에 어떤 패턴이 녹아 있는지 들여다보면 이해 속도가 눈에 띄게 빨라진다.