행동 디자인 패턴 2026
객체를 생성하는 법은 알고 있습니다. 객체를 조직하는 법도 알고 있죠. 이제 객체들이 서로 어떻게 소통하는지 배워야 합니다.
행동 패턴(Behavioral patterns)은 소프트웨어에서 가장 어려운 질문인 '객체들이 어떻게 협력해야 하는가?'에 대한 해답을 제시합니다.
잘못된 설계는 다음과 같은 문제를 초래합니다:
- 쉽게 깨지는 강하게 결합된 객체들.
- 파편화된 상태 관리.
- 테스트하기 어려운 거대한 조건문 블록.
- 혼란스러운 이벤트 처리.
시니어 개발자들은 통신을 관리하기 위해 행동 패턴을 사용합니다. 실무에서 반드시 알아야 할 가장 중요한 패턴들을 소개합니다.
Strategy (전략 패턴) 작업을 수행하는 여러 가지 방법이 있을 때 사용합니다. 다양한 결제 방식에 대해 거대한 if-else 블록을 사용하는 대신, 각 방식에 대해 별도의 클래스를 만드세요. 이렇게 하면 코드를 확장하기 쉬워집니다.
Observer (옵저버 패턴) 이벤트 기반 시스템에 사용합니다. 한 객체의 상태가 변경되면, 그에 의존하는 모든 객체에 자동으로 알림이 전달됩니다. 주식 시세표나 소셜 미디어 알림을 떠올려 보세요.
Command (커맨드 패턴) 요청을 독립적인 객체로 변환합니다. 이를 통해 실행 취소/다시 실행(undo/redo) 기능이나 작업 큐를 구축할 수 있습니다. 각 액션은 스스로를 어떻게 실행하고 되돌리는지 알고 있습니다.
State (상태 패턴) 복잡한 워크플로우를 관리할 때 사용합니다. 곳곳에서 상태 변수를 확인하는 대신, 각 상태를 하나의 클래스로 만드세요. 주문 처리나 신호등 시스템에 완벽하게 적용됩니다.
Template Method (템플릿 메서드 패턴) 기본 클래스에 알고리즘의 골격을 정의합니다. 하위 클래스에서 구체적인 단계를 구현하도록 합니다. 이는 데이터 처리 파이프라인에서 코드 중복을 줄여줍니다.
Chain of Responsibility (책임 연쇄 패턴) 요청을 일련의 핸들러 체인을 통해 전달합니다. 각 핸들러는 문제를 해결할 수 있는지, 아니면 다음 사람에게 넘겨야 할지를 결정합니다. 미들웨어나 고객 지원 티켓 시스템에서 흔히 사용됩니다.
Iterator (반복자 패턴) 컬렉션의 내부 작동 방식을 노출하지 않고 요소에 접근합니다. 이를 통해 데이터의 내부 구조를 숨길 수 있습니다.
Mediator (중재자 패턴) 통신을 중앙 집중화합니다. 객체들이 모든 객체와 직접 대화하는 대신, 하나의 조정자(coordinator)와 대화하게 합니다. 이를 통해 복잡하게 얽힌 연결 관계를 방지할 수 있습니다.
Memento (메멘토 패턴) 나중에 복구할 수 있도록 객체의 상태를 캡처합니다. 스냅샷이나 롤백 기능에 사용됩니다.
Visitor (방문자 패턴) 객체 자체를 변경하지 않고도 안정적인 구조에 새로운 연산을 추가할 수 있습니다. 보고서 생성이나 복잡한 파일 시스템에 유용합니다.
Interpreter (해석자 패턴) 앱을 위한 미니 언어를 구축합니다. 규칙 엔진이나 사용자 정의 검색 쿼리에 사용됩니다.
황금률: 객체 상호작용을 명시적으로 만드세요. 복잡한 조건문 내부에 동작을 숨기지 마세요.