반응형

gof의 디자인 패턴 49

[C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 개요, 시나리오

15. 책임 연쇄 패턴(Chain of Responsibility Pattern) 15.1 개요 여러 형식 개체들로 구성된 프로그램을 작성하다 보면 메시지를 보내는 곳에서 이를 받아 처리해야 할 개체의 위치를 파악하기가 어려운 경우가 발생합니다. 만약, 메시지를 받아 처리해야 할 개체들을 관리하는 집합체가 있거나 계층화되어 있다면 책임 연쇄 패턴을 통해 효과적으로 메시지를 전달할 수 있습니다. 책임 연쇄 패턴에서는 메시지 송신자는 이를 받아 처리해야 할 개체가 속한 집합체에 메시지를 전달하면 집합체 내에서 수신해야 할 개체에게 메시지를 전달하여 처리를 하게 하는 것입니다. 특정 개체에게 메시지가 전달되면 해당 메시지를 자신이 처리를 할 것인지를 판단을 하게 됩니다. 만약, 자신이 처리를 해야 한다면 이에..

[C#] 행동 패턴 (책임 연쇄 패턴, 명령 패턴, 해석자 패턴, 중재자 패턴, 메멘토 패턴, 감시자 패턴, 상태 패턴, 전략 패턴, 템플릿 메서드 패턴, 방문자 패턴)

3부 행동 패턴들 15. 책임 연쇄 패턴(Chain of Responsibility Pattern)송신부에서는 수신부에 전달하면 수신부에서 메시지를 전달받은 개체는 자신과 연관되는 다른 개체들에게 이 메시지를 전달을 하는 형태로 실제 처리할 개체까지 전달합니다. 실제 윈도우즈 프로그램에서 메시지를 처리하는 내부 원리도 이와 흡사합니다. 2016/04/27 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 개요, 시나리오 16. 명령 패턴 (Command Pattern) 명령을 요청하는 곳에서 수행할 알고리즘을 입력 인자로 정의하여 명령을 수행하는 곳에서는 입력 인자로 전달받은 알고리즘을 이용을 하게 합..

[C#] 프락시 패턴(Proxy Pattern) 보호용 프락시 - 개요, 시나리오

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 14.1 개요 이번에는 프락시 패턴 중에서 보호 프락시에 대해 살펴보기로 합시다. 보호 프락시는 사용자가 실제 개체의 특정 행위를 수행할 수 있는 권한이 있는지를 확인할 필요가 있을 경우에 사용이 됩니다. 14. 2 시나리오 저녁에 가족들과 같이 TV 시청을 하면서 사생활 보호에 대한 얘기를 나누게 되었어요. 얘기를 하다 보니 어디까지 공유해야 하고 보호해야 하는지에 대한 생각이 서로 많이 다르더군요. 얘기를 나누면서 우리 가족은 서로에 대한 신뢰를 바탕으로 자신이 생각이 제일 중요하다는 결론에 도달했습니다. 그리고, 저는 방으로 들어가 새로운 형태의 사진 관리 응용을 만들어 보았습니다. 기존의 응용에서는 단순히 메모리 카드에 있는 사진을 ..

[C#] 생성 패턴 개요 (추상 팩토리 패턴, 빌더 패턴, 팩토리 메서드 패턴, 원형 패턴, 단일체 패턴)

1부 생성 패턴들 1. 추상 팩토리 패턴(Abstract Factory Pattern) 호환성 있는 개체군을 하나의 팩토리 개체를 통해 생성하게 함으로써 사용자 편의성을 증대시킬 수 있다. 2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 1. 추상 팩토리 패턴 (Abstract Factory Pattern) - 개요, 시나리오2. 빌더 패턴(Builder Pattern) 개체를 생성하는 과정이 복잡하면 생성하는 알고리즘을 빌더에 구현하여 빌더 개체를 통해 복잡한 개체 생성을 쉽게 사용할 수 있다. 2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 2. 빌더 패턴(Builder Pattern) - 개요, 시나리오 3..

[소프트웨어 패턴 C#] 25. 방문자 패턴(Visitor Pattern)

25. 방문자 패턴(Visitor Pattern) 프로그래밍을 하다 보면 여러 구성 요소들로 구성된 개체를 정의해야 하는 경우는 매우 흔한 일입니다. 그리고, 특정 명령을 수행함에 있어 내부 구성 요소 개체들의 형식에 따라 적용해야 할 구체적 행위가 다른 경우가 있을 것입니다. 이와 같은 경우에 방문자 패턴을 사용하면 개체들의 형식에 따라 적용해야 할 구체적 행위를 분리하여 정의할 수 있습니다. 이는 새로운 행위를 정의할 필요가 생길 경우에도 구성 요소 형식을 변경하지 않으면서 추가할 수 있게 됩니다. 방문자 패턴에서는 개체를 구성하는 여러 요소 개체들에게 요소의 형식에 따라 수행할 구체적 작업을 방문자에 정의하게 됩니다. 대신 요소의 형식에서는 방문자를 수용하는 메서드를 제공을 하고 방문자를 통해 자신..

[소프트웨어 패턴 C#] 24. 템플릿 메서드 패턴(Template Method Pattern)

24. 템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴은 단계별로 수행하는 행위에 대한 약속을 기반 클래스에서 정의를 하고 각 단계별로 수행하는 구체적 구현은 파생 클래스에서 재 정의하는 형태의 패턴입니다. 비슷한 형태의 프로그램 구현에 필요한 뼈대를 일반화하여 제공을 하는 것은 실무에서 자주 사용하는 기법입니다. 일반화 과정을 통해 작성된 뼈대가 마련이 되어 있다면 실제 프로그래밍을 할 때에는 이를 기반으로 세부적인 기능에 대한 재 정의를 통해 효과적인 프로그래밍을 할 수 있습니다. 그리고, 설계 단계에서 프로그램 뼈대를 고민하는 비용을 줄일 수 있게 되고 기술 노하우를 결집 시킬 수 있게 해 줍니다. 이를 위해서 템플릿 메서드 패턴에서는 특정 연산을 구성하는 세부 ..

[소프트웨어 패턴 C#] 22. 상태 패턴(State Pattern)

22. 상태 패턴(State Pattern) 프로그래밍을 하다 보면 개체의 상태에 따라 구체적인 행위가 다르게 작성해야 하는 경우가 있습니다. 상태 패턴은 이와 같이 상태에 따라 동작을 다르게 해야 하는 부분만 별도의 클래스로 정의를 하는 패턴입니다. 상태 패턴에서는 특정 형식의 개체가 상태에 따라 동작을 다르게 하는 행위를 조사하여 추상 클래스로 만듭니다. 그리고, 각 상태에 따라 구체적인 행동을 하는 파생 클래스들을 정의를 하게 됩니다. 이와 같이 정의를 하면 특정 형식에서 해당 부분은 별도의 상태 개체를 통해 수행하게 됩니다. 개발자 입장에서 본다면 특정 형식의 상태 추가나 삭제를 빠르고 유연하게 대처할 수 있게 됩니다. 2016/04/28 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C..

[소프트웨어 패턴 C#] 21.감시자 패턴(Observer Pattern)

21. 감시자 패턴(Observer Pattern) 감시자 패턴은 하나의 개체가 여러 개체의 상태의 변화를 감지하는 역할을 담당하게 하는 패턴입니다. 특정 개체의 상태가 바뀌게 되었을 때 이를 반영해야 하는 개체가 여러 개가 있을 수 있습니다. 이 경우에 다른 개체의 상태가 바뀌었을 때 자신도 변화를 갖어야 하기 때문에 결합도가 강하여 유연하게 프로그래밍 하기 힘들어집니다. 이 경우에 감시자 패턴을 사용을 하면 결합도를 느슨하게 하여 유연한 프로그래밍을 할 수 있게 해 줍니다. 감시자 패턴에서는 감시자는 다른 개체의 상태의 변화를 통보를 받는 역할과 이 변화를 구독하기를 원하는 개체에게 알려주는 역할을 합니다. 이를 위해 감시자 개체는 상태의 변화가 발생하는 주 개체에게 상태 변화에 대한 통보를 해 줄 ..

[소프트웨어 패턴 C#] 20. 메멘토 패턴 (Memento Pattern)

20. 메멘토 패턴(Memento Pattern) 메멘토 패턴은 개체의 상태를 기록해 놓았다가 원래 상태로 복원을 할 필요가 있을 때 기록해 놓은 것을 사용하는 패턴입니다. 메멘토 패턴은 실행 취소 기능을 지원하고자 할 때 많이 사용됩니다. 간단한 예를 들어볼께요. 어떠한 응용에서 특정 기능을 수행할 것을 요청하기 전에 원본 개체에게 메멘토 개체를 요청합니다. 원본 개체는 자신의 상태 정보에 대한 스냅샷인 메멘토 개체를 생성하여 반환합니다. 그리고, 특정 기능을 수행하다가 수행 이전 상태로 복원이 필요하게 되면 반환 받았던 메멘토 개체를 원본 개체에게 전달하여 복원할 것을 요청합니다. 원본 개체는 전달받은 메멘토 개체에 보관해 두었던 이전 상태 값을 얻어와서 자신의 상태를 복원을 하는 것입니다. 2016..

[소프트웨어 패턴 C#] 19. 중재자 패턴 (Mediator Pattern)

19. 중재자 패턴(Mediator Pattern) 중재자 패턴은 프로그램의 상호작용을 해야 하는 개체들이 서로 복잡하게 관계를 맺고 있을 경우에 상호작용에 관련된 행동을 별도의 형식으로 정의하여 중재를 맡는 개체를 두게 하는 패턴입니다. 프로그램을 작성하다 보면 복잡한 상호작용을 해야 하는 경우 개체들 간의 결합도는 강하게 되고 유연성이 떨어져서 재 사용하기 힘든 경우가 발생합니다. 특히, 하나의 개체에서 다른 개체에게 일방적으로 명령을 하는 것이 아니라 명령을 받는 개체도 특정 조건에서 명령을 내린 개체에게 명령을 내릴 수 있는 경우에는 구조적으로 취약하게 됩니다. 이와 같은 경우에 중재자 패턴을 사용하면 전체적으로 강한 결합도를 부분적으로만 결합도가 강한 상태를 유지하고 많은 부분에서 결합도를 느슨..

반응형