본문 바로가기
카테고리 없음

디자인 패턴을 파이썬으로 구현하기: GoF 패턴이 동적 언어에서도 유효한 이유(기본/개요, 기능/스펙, 장단점, 추천 대상, FAQ)

by BOOST YOUR INFORMATION 2026. 8. 9.

디자인 패턴을 파이썬으로 구현하기: GoF 패턴이 동적 언어에서도 유효한 이유
디자인 패턴을 파이썬으로 구현하기: GoF 패턴이 동적 언어에서도 유효한 이유

 

기본/개요: 디자인 패턴이란 무엇이고 파이썬에서는 왜 다르게 접근해야 하는가

디자인 패턴은 1994년 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(흔히 "GoF, Gang of Four"로 불림) 네 저자가 쓴 책 《Design Patterns: Elements of Reusable Object-Oriented Software》에서 정리한, 소프트웨어 설계에서 반복적으로 등장하는 문제와 그 해결책의 템플릿이다. 이 책은 생성(Creational), 구조(Structural), 행동(Behavioral) 세 범주로 총 23개의 패턴을 정리했다.

중요한 점은, 이 패턴들이 C++이나 Java 같은 정적 타입 언어를 전제로 만들어졌다는 것이다. 파이썬처럼 동적 타이핑과 1급 함수(first-class function)를 지원하는 언어에서는 일부 패턴이 언어 차원에서 이미 해결되어 있거나 훨씬 단순하게 구현된다. 예를 들어 Strategy 패턴은 자바에서는 인터페이스와 여러 클래스를 만들어야 하지만, 파이썬에서는 함수를 변수에 담아 전달하는 것만으로 동일한 효과를 낼 수 있다.

기능/스펙: 파이썬에서 자주 쓰이는 패턴과 구현 형태

  • 싱글턴(Singleton): 클래스의 인스턴스를 하나만 유지하는 패턴. 파이썬에서는 모듈 자체가 이미 임포트 시 한 번만 로드되어 싱글턴처럼 동작하기 때문에, 모듈 수준 변수로 대체하는 경우가 많다.
  • 팩토리(Factory Method): 객체 생성 로직을 별도 함수/메서드로 분리하는 패턴. 파이썬의 동적 클래스 특성상 딕셔너리에 클래스를 매핑해두고 키로 찾아 생성하는 방식이 흔히 쓰인다.
  • 데코레이터(Decorator): GoF의 구조 패턴 중 하나인데, 파이썬은 @decorator 문법으로 언어 차원에서 이 패턴을 1급 시민으로 지원한다.
  • 옵저버(Observer): 상태 변화를 구독자들에게 통지하는 패턴. 이벤트 기반 시스템, GUI 콜백 구조에서 자주 쓰인다.
  • 전략(Strategy): 알고리즘군을 캡슐화해 상호 교체 가능하게 만드는 패턴. 파이썬에서는 클래스 대신 함수를 인자로 넘기는 방식으로 간결하게 구현 가능하다.

장단점

장점: 디자인 패턴을 익히면 팀원 간 설계 의도를 "Observer 패턴 써서 처리했어요"처럼 짧은 용어로 공유할 수 있어 커뮤니케이션 비용이 줄어든다. 또한 검증된 해결책을 재사용하므로 설계 초기 시행착오를 줄일 수 있다.

단점: 모든 상황에 패턴을 끼워 맞추려는 "패턴 강박"이 생기면 오히려 코드가 불필요하게 복잡해진다. 특히 파이썬처럼 유연한 언어에서 자바식 패턴 구조(추상 클래스 + 인터페이스 + 구체 클래스 계층)를 그대로 옮기면, 함수 하나로 끝날 일을 클래스 세 개로 늘리는 과잉 설계가 되기 쉽다.

개인적인 비판: 파이썬 개발자에게 GoF 패턴을 가르칠 때는 "이 패턴을 어떻게 파이썬스럽게(Pythonic) 단순화할 수 있는가"를 함께 짚어주지 않으면, 배운 지식이 오히려 불필요한 복잡도를 만드는 역효과를 낳을 수 있다고 본다. 패턴은 목적이 아니라 수단이라는 점을 강조하고 싶다.

추천 대상

  • 자바/C++ 등 정적 언어에서 패턴을 배운 뒤 파이썬으로 넘어온 개발자로, 언어 차이에서 오는 구현 간소화 포인트를 알고 싶은 경우
  • 협업 시 설계 논의를 위한 공통 어휘가 필요한 팀
  • 반대로, 이제 막 파이썬 문법을 배우기 시작한 완전 입문자에게는 아직 이르다. 함수, 클래스, 상속 같은 기본 객체지향 개념을 먼저 다진 후 접근하는 것을 권한다.

FAQ

Q. 파이썬에서도 GoF 패턴을 그대로 다 배워야 하나요?
A. 23개 패턴을 모두 암기할 필요는 없다. 실무에서 자주 마주치는 몇 가지(팩토리, 전략, 옵저버, 데코레이터 등)를 중심으로 실제 코드에서 어떻게 단순화되는지 이해하는 것이 더 실용적이다.

Q. 싱글턴 패턴은 파이썬에서 안티패턴인가요?
A. 상황에 따라 다르다. 전역 상태 관리가 필요한 설정 객체 등에는 여전히 쓰이지만, 테스트하기 어렵게 만든다는 비판도 있다. 어느 쪽이 "정답"이라고 단정하기는 어렵고 팀의 코드베이스 성격에 달려 있다.

Q. 어떤 책으로 시작하면 좋나요?
A. 원전인 GoF의 《Design Patterns》가 기준이 되는 책이지만, 파이썬 코드 예제로 재구성된 국내외 서적이나 온라인 자료를 함께 참고하는 것을 권한다. 구체적인 최신 도서 목록은 이 글의 범위를 벗어나므로 별도로 확인이 필요하다.

출처

  • Gamma, Helm, Johnson, Vlissides, 《Design Patterns: Elements of Reusable Object-Oriented Software》(Addison-Wesley, 1994)
  • Python 공식 문서(데코레이터 문법 등 언어 레퍼런스), https://docs.python.org/ko/3/reference/

소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 ⚡ 정보 부스터 🚀