반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 컴퓨터과학
- 데이터분석
- 컴퓨터공학
- 머신러닝
- 웹개발
- 네트워크
- Yes
- 프로그래밍
- 프로그래밍언어
- 자바스크립트
- 클라우드컴퓨팅
- 소프트웨어
- 데이터과학
- I'm Sorry
- 알고리즘
- 디자인패턴
- 빅데이터
- 인공지능
- 딥러닝
- 컴퓨터비전
- 사이버보안
- 보안
- 파이썬
- 데이터베이스
- 소프트웨어공학
- springboot
- 데이터구조
- 버전관리
- 네트워크보안
- 자료구조
Archives
- Today
- Total
스택큐힙리스트
책임 연쇄 vs 데코레이터 — 헷갈리는 두 패턴, 결정적 차이를 콕 짚다 본문
반응형
1. 큰그림
두 패턴 모두 객체를 일렬로 연결해 요청을 전달하는 “재귀적 합성(체이닝)” 구조를 쓴다. 그래서 UML만 보면 “거의 같은데?” 싶지만, 의도와 결과가 완전히 다르다.
2. 공통점 ― 왜 비슷해 보일까?
- 재귀 합성: 객체가 자기 안에 같은 타입을 보관하고 다음 객체로 위임한다.
- 런타임 조립: 체인 순서를 코드를 수정하지 않고 동적으로 바꿀 수 있다.
- 결합도 ↓: 클라이언트는 “얼마나 많은 객체가 연결돼 있는지” 모른다.
3. 결정적 차이점
포인트 | 책임 연쇄(CoR) | 데코레이터(Decorator) |
목적 | “누가 요청을 처리할지 찾는다” – 책임 위임 | “객체에 기능을 덧붙인다” – 행위 확장 |
흐름 제어 | 핸들러가 처리를 중단할 수 있음 (다음으로 패스 여부 결정) | 데코레이터는 반드시 내부 객체를 호출해 흐름을 이어감 |
반환값/사이드이펙트 | 주로 하나만 결과를 만든다 (ex. 인증 실패 → 401) | 호출마다 누적 효과가 생긴다 (ex. 로그 + 캐싱 + 인코딩) |
Undo/Redo | 거의 사용하지 않음 | 래퍼를 벗겨 원상복구 가능 |
대표 사례 | Spring Security Filter Chain, Exception Resolver | Java I/O BufferedInputStream, 로깅 인터셉터 |
4. 언제 어떤 패턴을 쓰면 좋을까?
- 요청이 한 번만 처리되면 끝 👉 책임 연쇄
예) 인증 → 승인된 첫 핸들러만 200 OK 반환, 이후 체인은 멈춤. - 여러 기능을 겹겹이 추가 👉 데코레이터
예) 리스너에 로그 → 캐시 → 암호화 → 전송을 차례로 포장.
TIP: 체인 중 일부 단계에서 흐름을 끊어야 한다면 데코레이터가 아니라 책임 연쇄를 선택하라
5. 현업 적용 팁
- 스프링 필터 작성: doFilter 안에서 return으로 체인을 끊을지(CoR) 꼭 확인.
- 관점이 바뀌어 혼동될 때: “이 단계가 일을 끝내야 하나, 추가 행동만 해야 하나?”를 자문해 보면 패턴이 자연스럽게 갈린다.
- 혼합 금물: 기능 확장용 데코레이터를 CoR에 끼워 넣으면 디버깅 지옥. 체인과 데코레이터는 각각의 레이어로 명확히 분리하자.
반응형
'개발' 카테고리의 다른 글
Kotlin Sequence 내부 구현으로 배우는 Lazy Iterator 원리 (1) | 2025.07.29 |
---|---|
Iterator 패턴 – 컬렉션 속을 우아하게 누비는 비결 (3) | 2025.07.29 |
책임을 넘겨라! Chain of Responsibility 한방 정복 (2) | 2025.07.28 |
명령을 객체로! 커맨드 패턴으로 유연한 실행 로직 만들기 🚀 (2) | 2025.07.28 |
Factory Method vs Template Method ― “누가 만들고, 누가 조립하나?” (3) | 2025.07.24 |
Comments