티스토리 뷰

반응형

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

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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
글 보관함