Skip to main content

Posts

Showing posts from September 8, 2013

책임 연쇄 패턴 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. 객체 간의 행동 결합도가 현저히 낮아진다. 즉, 객체들 간의 상호 작용 과정을 단순

Command Pattern

Command Pattern 명령 패턴은 요청 자체를 캡슐화하는 것이다. 서로 다른 요청을 매개변수로 만들고, 원하는 처리를 수행한 후, 되돌릴 수 있는 연산을 수행한다. 요청 자체를 객체로 바꿔서, 명시되지 않은 응용 프로그램 객체의 요청을 처리할 수 있도록 지원하는 패턴이다. 그리고 이 객체는 저장되거나 전달될 수 있다. 이 패턴의 핵심은 연산을 실행하는 데 필요한 인터페이스를 선언해 놓는 Command 추상 클래스이다. 이 클래스의 가장 기본 연산은 Execute()이며, Command 추상 클래스에서 상속 받은 서브클래스들은 수신 객체에 대한 참조자를 인스턴스 변수로 저장하고, 이 수신 객체에 정의된 요청을 호출하도록 Execute()를 구현하여, 수신자 - 작동 쌍의 정의한다. 예를 들어, 홈 오토메이션 리모컨이 있고, 이 리모컨으로 모든 가전 제품을 제어할 수 있다고 했을 때, 리모컨은 receiver가 되고, 각 가전 제품은 concreteCommand가 된다. command class에는 execute가 있고 receiver에서는 각 구현 클래스의 execute함수를 호출한다. 참조문헌 1. GoF 2. http://valley.egloos.com/viewer/?url=http://liepooh.egloos.com/1096056