반응형

gof의 디자인 패턴 49

[C#] 중재자 패턴(Mediator Pattern) - 개요, 시나리오

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

[C#] 반복자 패턴(Iterator Pattern) - 구현

18. 반복자 패턴(Iterator Pattern) [그림] 반복자 패턴 클래스 다이어그램 18.4 구현 반복자 패턴에 대한 예제 프로그램을 구현하는 순서는 Collection, Iterator, Arr과 ArrIterator, Tracer순으로 하겠습니다. 18.4.1 IContainer IContainer에서는 일반적으로 컬렉션에 필요한 메서드에 대한 구현 약속만 하면 되겠죠. 여기에서는 보관하는 메서드와 삭제, 전체 해제, 현재 보관된 수를 얻어오는 속성에 대한 약속을 하겠습니다. IIterator.cs using System; namespace Iterator { interface IIterator { void Begin(); bool MoveNext(); Object Current { get; ..

[C#] 반복자 패턴(Iterator Pattern) - 설계(Design)

18. 반복자 패턴(Iterator Pattern) 18. 3 디자인 C#에서는 IEnumerator, IEnumerable 인터페이스를 약속하고 ArrayList나 배열과 같은 컬렉션들이 이들 인터페이스를 구현 약속함으로써 사용자가 foreach 구문을 통해 컬렉션의 요소들을 반복적으로 접근할 수 있게 제공하고 있습니다. 여기에서는 이러한 부분이 C#에 제공하지 않는다는 관점에서 반복자 패턴을 표현해 보려고 합니다. 반복자 패턴에 대한 설명을 위한 예제 프로그램은 추상화 컬렉션을 파생받은 배열 형식에 대한 정의와 반복자를 파생받은 배열 반복자를 정의한 것이 맞게 작성된 것인지를 확인하는 예광탄으로 하겠습니다. 추상화 된 컬렉션에는 개체를 보관하거나 삭제할 수 있고 전체를 제거하거나 보관된 개체를 얻어올..

[C#] 반복자 패턴(Iterator Pattern) - 개요, 시나리오

18. 반복자 패턴(Iterator Pattern) 18.1 개요 프로그램을 하다 보면 개체들을 보관하는 컬렉션 개체를 사용하는 것은 매우 흔한 일입니다. 그리고, 컬렉션의 안전성을 유지하기 위해서는 개체를 보관하는 공간을 직접적으로 노출시키지 않게 됩니다. 하지만 사용자의 경우 컬렉션에 보관된 개체들의 정보를 검색할 수 있어야 하며 경우에 따라서는 보관된 개체들에 대해 반복된 작업을 수행하기를 원하는 경우가 있습니다. 반복자 패턴은 컬렉션 개체의 내부 저장 공간에 대해 직접적으로 노출하는 것을 막으면서 보관된 개체들에 대해 반복된 작업을 수행할 수 있는 방법을 제공하고자 할 때 사용하는 패턴입니다. 반복자 패턴에서는 컬렉션을 반복 순회하면서 작업을 수행할 필요가 있을 때 순회할 수 있는 도구 개체를 정..

[C#] 해석자 패턴(Interpreter Pattern) - 구현

17. 해석자 패턴(Interpreter Pattern) [그림] 해석자 패턴 클래스 다이어그램 17.4 구현 해석자 패턴에 대한 예제 프로그램을 구현하는 순서는 Picture, Expression 군, Macro와 데모 코드 순으로 하겠습니다. 17.4.1 Picture Picture에서는 단순히 사진의 이름과 색조, 명도, 채도의 값을 갖는 클래스로 구현을 하겠습니다. 시나리오를 위해 필요한 클래스이며 해석자 패턴과 관련되는 형식은 아닙니다. Expression.cs namespace Interpreter { abstract class Expression { public Expression Next{ get; set; } public Expression() { Next = null; } public ..

[C#] 해석자 패턴(Interpreter Pattern) - 설계(Design)

17. 해석자 패턴(Interpreter Pattern) 17. 3 디자인 해석자 패턴에 대한 설명을 위한 예제 프로그램은 매크로를 통해 사진 보정을 할 수 있게 하는 프로그램입니다. Macro는 각 표현을 해석할 수 있는 개체들을 리스트 형태로 갖고 있습니다. 그리고, Expression 개체들은 입력된 구문을 해석을 하게 되고 뒤에 연결된 다른 Expression 개체가 있으면 해석된 부분을 제외한 구문을 해석을 하게 할 것입니다. 그리고, 사진 개체를 변환을 요청하면 리스트의 각 Expression 개체들은 이미 해석된 내용에 맞게 사진을 보정을 하도록 하겠습니다. 보통 해석자 패턴은 복합체 패턴이나 플라이급 패턴 등과 혼합하여 자주 사용이 되는데 여기에서는 책임 연쇄 패턴과 혼합하여 보았습니다. ..

[C#] 명령 패턴(Command Pattern) - 구현

16. 명령 패턴(Command Pattern)[그림] 명령 패턴(Command Pattern) 클래스 다이어그램 16.4 구현 명령 패턴에 대한 예제 프로그램을 구현하는 순서는 Picture, Command 군, PictureManager, UIPart와 데모 코드 순으로 하겠습니다. 16.4.1 Picture Picture에서는 단순히 사진의 이름과 소유자 정보를 멤버로 갖는 클래스로 구현을 하겠습니다. IExecute.cs namespace Command { interface IExecute { void Execute(Picture picture); } } PictureManager.cs using System.Collections.Generic; namespace Command { class Pi..

[C#] 명령 패턴(Command Pattern) - 설계(Design)

16. 명령 패턴(Command Pattern) 16. 3 디자인 명령 패턴에 대한 설명을 위한 예제 프로그램은 사진 관리자에 관한 소재를 대상으로 하겠습니다. 사용자와 상호작용을 하는 UIPart는 클라이언트 역할을 하며 사진을 추가하거나 사진의 정보를 간단히 보여달라는 명령 혹은 상세히 보여달라는 명령을 요청하는 주체입니다. PictureManager는 UIPart에서 전달된 명령에 따라 파일을 보관하고 보여주는 등의 작업을 수행합니다. 명령 패턴으로 예제 프로그램을 작성할 것이기 때문에 PictureManager에서 수행할 추상적인 행위와 구체적인 행위는 분리하였습니다. 수행할 추상작인 행위에 대한 형식 정의는 IExecute인터페이스에 명령을 수행할 수 있는 Execute 메서드에 대한 약속을 하..

[C#] 명령 패턴(Command Pattern) - 개요, 시나리오

16. 명령 패턴(Command Pattern) 16.1 개요 프로그래밍을 하다 보면 명령을 내리는 개체와 명령을 수행하는 개체를 나누는 작업은 매 번 있는 작업입니다. 그런데, 실제 요청한 작업을 수행하는 개체에서 수행에 필요한 알고리즘을 모두 포함시켰을 경우에 비슷한 형태의 여러 메서드를 구현하여야 하는 경우가 발생합니다. 경우에 따라서는 명령을 내리는 시점과 실제 명령을 수행하는 시점이 다르고 다양한 설정에 따라 구체적인 수행 알고리즘이 다른 경우도 발생합니다. 이와 같은 경우에 명령을 내리는 곳에서 일부 알고리즘을 정의하여 명령을 수행하는 개체의 메서드를 호출할 때 입력 인자로 전달하는 것이 더 효과적인 경우가 발생합니다. 이와 같은 경우에 명령 패턴은 효과적으로 사용할 수 있습니다. 명령 패턴은..

[C#] 책임 연쇄 패턴(Chain of Responsibility Pattern) - 설계(Design)

15. 책임 연쇄 패턴(Chain of Responsibility Pattern) 15. 3 디자인 책임 연쇄 패턴에 대한 설명을 위한 예제 프로그램은 사진 보정에 관한 소재를 대상으로 하겠습니다. 사용자와 상호작용을 하는 UIPart는 클라이언트 역할을 하며 사진을 보정하는 개체에게 보정 명령을 요청하는 주체입니다. 사진을 보정하는 개체들은 UIPart에서 전달된 명령을 처리하거나 연결된 다른 사진 보정 개체에게 전달하게 할 것입니다. 이를 위해 추상 클래스로 ChangeHandler를 정의하였고 보정 명령을 받아 수행할 수 있는 ChangeRequest 메서드에 대한 약속을 멤버로 정의하였습니다. 그리고, 다른 사진 보정 개체에게 전달된 명령을 전달할 수 있게 하였습니다. 예제 프로그램에서는 사진 보..

반응형