티스토리 뷰
chain of responsibility pattern
: 의무 체인, 책임 연쇄 패턴 등등으로도 불린다.
작업 처리 객체의 체인(동작 체인 등)을 만들 때는 의무 체인 패턴을 사용한다.
한 객체가 어떤 작업을 처리한 다음에 다른 객체로 결과를 전달하고,
다른 객체도 해야 할 작업을 처리한 다음에 또 다른 객체로 전달하는 방식.
즉, 서로 다른 작업을 처리할 수 있는 객체를 연결시키고,
처리할 작업이 들어오면, 자신이 처리할 수 있는 일은 수행하고, 다음으로 넘기는 방식이다.
이 패턴을 공부하고 느낀점...
이러한 여러 조건을 따지고, 작업을 처리해야할 경우, 하나의 클래스에 if-else문(조건문)으로 작업을 처리했었다.
그렇기 때문에, 변경사항이 생겼을 경우, 다시 해당 코드를 지우고, 새로 작성하는 노동의 시간을 가졌다.
(작업을 처리하는 객체들이 독립적이 않고, 하나의 클래스에서 작성되어 있었기 때문에... )
: 결합도가 높아 유연성이 떨어짐.
그러나 해당 패턴을 적용한다면, 각 작업을 처리할 객체들을 독립적으로 구성할 수 있고,
변경사항 (ex: 작업 추가, 삭제, 수정) 이 있을 경우, 다음 작업 객체의 연결만 변경해주면 되는 장점을 가지게 된다.
: 결합도가 낮아져 유연성이 높아짐.
chain of Responsibility 구현 초점
구현 방식을 잊지 않기 위해? 나름대로 정리하면,
chain of responsibility가 가지고 있어야 할 메서드는...
1. 나 다음의 작업을 처리할 객체를 지정하기 위한 메서드
2. 작업을 받으면, 내가 처리해야 동작 메서드
이렇게 두가지가 반드시 필요하다.
아래 코드는
"패스트캠퍼스 - 25개 백엔드 개발 필수 현업 예제를 통해 마스터하는 JAVA STREAM" 강의에 나온 예제이다.
JAVA STREAM을 공부하는 강의이기 때문에 각 클래스별로 상속을 받아서 처리하는 방식이 아닌 함수형 프로그래밍 방식으로 작성되어 있다.
그러나 객체지향 프로그래밍도 클래스별로 상속을 받아서 연결지으면 된다.
[ OrderProcessStep.java ]
- 위 코드가 chain of responsibility 패턴을 적용하기 위한 구조로써,
나 다음에 작업을 수행할 객체를 지정하는 setNext,
내가 작업을 받았을 때 처리할 기능인 process,
로 이루어져 있다.
[ Main.java ]
- 위의 코드는 작업을 처리할 객체들을 연결시킨 부분 ( chain )이다.
- 초기 작업을 수행할 initializeStep 부터 ->
setOrderAmountStep ->
verifyOrderStep ->
processPaymentStep ->
handleErrorStep ->
completeProcessingOrderStep 순으로 연결된다.
위에 대한 전체 코드는 아래 Gitlab을 통해 확인할 수 있다.
https://gitlab.com/mskim0ct/tutorial/-/tree/main/src/com/fastcampus/chapter10/chanofresponsibility
'DesignPattern' 카테고리의 다른 글
[ Design Pattern ] Decorator Pattern (0) | 2022.03.17 |
---|---|
[ Design Pattern ] Template Method Pattern (0) | 2022.03.11 |
[Design Pattern] Strategy Pattern (0) | 2022.03.11 |
[ 생성 패턴 ] Singleton 패턴 (0) | 2021.12.14 |
[디자인패턴-java] 디자인 패턴을 배우는 이유 (0) | 2021.12.12 |