Skip to main content

책임 연쇄 패턴 Chain of responsibility

책임 연쇄 패턴(Chain of Responsibility)

개념


메시지를 보낸 객체와 이를 받아 처리하는 객체 간의 결합도를 없애기 위한 패턴이다.

요청을 처리할 수 있는 객체를 여러 만들고, 요청을 송신하는 객체와 그 요청을 수신하여 처리하는 객체 사이의 결합을 피하는 패턴이다. 그리고 요청을 수신할 수 있는 객체를 연쇄적으로 묶고, 실제 요청을 처리하는 객체를 만날 때까지 고리를 따라 요청을 전달한다.


말이 좀 어려운데.. 이렇게 생각하면 알기 쉽다. 이 해동 패턴은 누군가에게 책임을 떠 넘기는 일이다.
예를 들어, 복리 후생에 관련된 문의가 있어서, 인사과 개똥이 과장에게 문의한다. 개통이 과장이 알면 답변할 것이고, 아니면 멍멍이 과장에게 문의하라고 할 것이다. 그럼 또 마찬가지로 멍멍이 과장에게 문의하면 그는 답변을 하던지 혹은 다른 이에게 문의하라고 할 것이다.
그리고 이 반복은 문의가 완료될 때까지 반복된다.


적용 사례

프로그래밍 관점에서 한번 보자.
어플리케이션이 있고, 그 속에 다이어로그 창이 있다. 그리고 그 창에는 버튼이 있다고 치자.
그리고 모든 컴포넌트에는 도움말 처리 기능이 있다고 하자.

클래스 구성요소와 종속성은 아래와 같다.


다음은 예제 코드이다.

1 Application* application = new Application(message);
2 Dialog* dialog = new Dialog(application, "다이어로그 도움말");
3 Button* btn = new Button(dialog, "버튼 도움말");

이 경우, 버튼에서 도움말 요청을 하면, 버튼 도움말이 표시될 것 이다(3번 행에서 설정되어 있으니깐).
하지만, 도움말이 설정되어 있지 않는다면, successor인 다이어로그의 도움말이 처리된다.



장단점

장점

1. 객체 간의 행동 결합도가 현저히 낮아진다. 즉, 객체들 간의 상호 작용 과정을 단순화함. 
2. 객체에 책임 할당에 관해 유연성이 높아진다.

단점

1. 메시지 수신과 처리를 보장받지 못 한다.



Comments

Popular posts from this blog

Linux Resources Monitoring

dstat Requirements:python Dstat is a versatile replacement for iostat, vmstat and ifstat http://linux.softpedia.com/get/System/Diagnostics/Dstat-1401.shtml  - download the source file  - tar -xvjf dstate-0.7.2.tar.bz2  - cd dstate-0.7.2  - sudo make install 사용법 dstat -cdngys --top-io-adv --top-bio-adv 창넓이가 크면 dstat -cdngys --top-io --top-bio dstat 기본옵션은 -cdngy 2. pktstat requirements: libpcap-devel, ncurses-devel pktstat man page 사용법:sudo pktstat -i eth0 -T -l 실행결과 interface: eth0    total: 43.9Mb (3s) cur: 12.3M (78%) min: 12.3M max: 15.8M avg: 14.5M bps    bps    %      b desc   1.4k   0%   4.3k arp  591.8   0%   1.2k ip proto 88 55.101.66.3 <-> igrp-routers  91.3k   0%  91.3k tcp a100236:4478 <-> console:ssh  42.6k   0% 216.4k tcp a100390:mailprox <-> console:ssh   1.1k   0%   ...

nginx로 다중 포트 설정 및 다중 react app 설정

nginx에 다중 포트 설정하기 react로 여러 webapp를 개발하고, 동일한 서버에 실행시킬 필요가 있다. 이때 간단히 nginx에서 다중포트로 여러 webapp를 동일한 서버에서 실행시킬 수 있다. /etc/nginx/sites-available/에 default 파일이 있다. 보통 port 80로 설정되어 있다. 이 파일을 복사해서 sub로 명명한다.   아래와 같이 포트 8080으로 정하고, react app를 build한 디렉터리를 root <dir>로 지정하고, $> sudo service nginx restart 하면 된다. $>sudo systemctl status nginx.service 로 nginx 상태 확인이 가능하면, $> netstat -ano | grep 8080 으로 8080 포트가 살아있는 또는 외부PC에서  $>telnet ip 8080으로 telnet 접속이 되는지 확인하면 된다. 종종 Nginx 500 Interval Server Error가 발생하는데, 이는 1) root <dir>에서 <dir> 주소가 정확하지 않거나, 2) 파일 권한이 없거나이다. chmod 755 <dir>하면 대부분 해결될 것이다. 그럼 오늘도 유익한 하루 되시길..   

SQLITE Result Codes

#define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* SQL error or missing database */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ #define SQLITE_FULL 13 /* Insertion failed because data...