반응형

프로그래밍 기술/Escort GoF의 디자인 패턴 C# 103

[C#] 상태 패턴(State Pattern) - 설계(Design)

22. 상태 패턴(State Pattern) 22. 3 디자인 상태 패턴에 대한 설명을 위한 예제로 사용할 프로그램은 카메라의 상태에 따라 다이얼을 조절하였을 때 조리개의 F값을 조절하거나 셔터 스피드를 조절하는 것으로 하겠습니다. 상태 패턴을 적용을 하지 않았을 경우에는 카메라 내부에서 상태에 따라 조리개의 F값을 조절하거나 셔터 스피드를 조절할 것을 상태 패턴을 적용하여 상태 개체를 통해 이들 작업을 대행하도록 하겠습니다. 예제로 사용할 프로그램에서의 카메라 상태는 정보 버튼을 누른 상태와 뗀 상태가 존재하며 상태에 따라 다른 동작을 하는 것은 다이얼을 통해 값을 증가하거나 감소시키는 것입니다. 이에 인터페이스 IState에서는 증가와 감소에 해당하는 메서드에 대한 약속을 정의합니다. 그리고, 버튼을..

[C#] 상태 패턴(State Pattern) - 개요, 시나리오

22. 상태 패턴(State Pattern) 22.1 개요 프로그래밍을 하다 보면 개체의 상태에 따라 구체적인 행위가 다르게 작성해야 하는 경우가 있습니다. 상태 패턴은 이와 같이 상태에 따라 동작을 다르게 해야 하는 부분만 별도의 클래스로 정의를 하는 패턴입니다. 상태 패턴에서는 특정 형식의 개체가 상태에 따라 동작을 다르게 하는 행위를 조사하여 추상 클래스로 만듭니다. 그리고, 각 상태에 따라 구체적인 행동을 하는 파생 클래스들을 정의를 하게 됩니다. 이와 같이 정의를 하면 특정 형식에서 해당 부분은 별도의 상태 개체를 통해 수행하게 됩니다. 개발자 입장에서 본다면 특정 형식의 상태 추가나 삭제를 빠르고 유연하게 대처할 수 있게 됩니다. 23. 2 시나리오 이번에 EH Camera 업체에서는 단순화 ..

[C#] 감시자 패턴(Observer Pattern) - 구현

21. 감시자 패턴(Observer Pattern) [그림] 감시자 패턴(Observer Pattern) 클래스 다이어그램 21.4 구현 감시자 패턴에 대한 예제 프로그램을 구현하는 순서는 Subject와 Picture, IUpdate와 각 뷰어, 데모 코드 순으로 하겠습니다. 21.4.1 Subject와 Picture Subject는 상태 변경이 있을 때 감시자에게 변경을 통보하는 역할을 담당합니다. 이를 위해 감시자를 등록하는 메서드와 해제하는 메서드를 구현해야 합니다. 그리고, 상태 변경이 있을 때 등록된 모든 감시자들에게 변경된 사실을 통보를 하는 메서드도 구현합시다. Picture.cs using System; namespace Observer { class Picture:Subject { pu..

[C#] 감시자 패턴(Observer Pattern) - 설계(Design)

21. 감시자 패턴(Observer Pattern) 21. 3 디자인 감시자 패턴에 대한 설명을 위한 예제로 사용할 프로그램은 사진을 보정하는 응용을 소재로 하겠습니다. 응용에는 사진 개체를 보정을 하면 이에 대한 색조, 명도, 채도를 나태내는 뷰어로 구성을 하려고 합니다. 만약, 사진 개체의 정보가 변경되면 각 뷰어는 이에 대한 변경 통보를 받아 화면에 변경된 값을 보여줄 것입니다. 만약, 감시자 패턴을 적용하지 않는다면 사진 개체는 각 뷰어에게 변경 통보를 해야 하고 각 뷰어는 이를 화면에 나타내야 하기 때문에 의존 관계에 있게 됩니다. 이 경우에 사진 개체는 다른 뷰어와 결합도가 강해 유연성이 떨어지게 됩니다. 여기에서는 사진과 같이 자신의 상태를 다른 개체에게 통보해야 하는 형식들의 추상 클래스 ..

[C#] 감시자 패턴(Observer Pattern) - 개요, 시나리오

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

[C#] 메멘토 패턴(Memento Pattern) - 구현

20. 메멘토 패턴(Memento Pattern) [그림] 메멘토 패턴(Memento Pattern) 클래스 다이어그램 20.4 구현 메멘토 패턴에 대한 예제 프로그램을 구현하는 순서는 Snapshot, Picture, App와 데모 코드 순으로 하겠습니다. 20.4.1 Snapshot Snapshot 형식에서는 사진의 색조, 명도, 채도 정보를 얻어오는 속성을 노출하고 설정하는 속성은 은폐할 것입니다. 설정하는 속성을 은폐하는 이유는 신뢰성을 높이기 위해 다른 형식 개체에서 이들에 대한 값을 변경하지 못하도록 하기 위해서 입니다. Picture.cs using System; namespace Memento { class Picture { string name; int tone; int brightnes..

[C#] 메멘토 패턴(Memento Pattern) - 설계(Design)

20. 메멘토 패턴(Memento Pattern) 20. 3 디자인 메멘토 패턴에 대한 설명을 위한 예제로 사용할 프로그램은 사진을 보정하는 응용을 소재로 하겠습니다. 응용은 사진에 대한 보정 작업을 수행할 수 있는데 보정 작업을 하는 도중에 취소를 요청하면 원래 사진으로 복원이 가능하게 할 것입니다. 응용은 App, 사진은 Picture 이름의 클래스를 사용하고 원본 Picture 개체 정보를 보관하는 Snapshot 형식을 정의할 것입니다. 응용에 사진이 설정이 되면 사진 개체에게 스냅샷을 만들어 줄 것을 요청하여 보관을 합니다. 그리고, 작업을 취소 요청을 하면 보관했던 스냅샷을 사진 개체에게 전달하여 복원하도록 할 것입니다. [그림 ] 메멘토 패턴 설계 예제 클래스 다이어그램 2016/04/28 ..

[C#] 메멘토 패턴(Memento Pattern) - 개요, 시나리오

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

[C#] 중재자 패턴(Mediator Pattern) - 구현

19. 중재자 패턴(Mediator Pattern) [그림] 중재자 패턴(Mediator Pattern) 클래스 다이어그램 19.4 구현 중재자 패턴에 대한 예제 프로그램을 구현하는 순서는 InnerModue 군, Mediator 군, Camera와 데모 코드순으로 하겠습니다. 19.4.1 InnerModule 군 InnerModule은 Shutter와 Iris의 기반 클래스입니다. 중재자 패턴에서 Shutter 개체와 Iris 개체는 서로에 대한 정보를 알 필요가 없게 하기 위해 중재자의 위치를 알아야 합니다. 그리고, 중재자 패턴에서는 Shutter 개체와 Iris 개체 사이에 주고 받아야 할 상호작용을 해야 하는 것을 중재자 개체에게 전달만 하면 되게 구현해야 합니다. 여기에서는 내부 모듈 개체 생..

[C#] 중재자 패턴(Mediator Pattern) - 설계(Design)

19. 중재자 패턴(Mediator Pattern) 19. 3 디자인 중재자 패턴에 대한 설명을 위한 예제는 카메라의 반 자동 모드에서 중재자를 통해 조리개 값의 변화와 셔터 스피드의 변화에 대한 상호작용을 하는 프로그램을 작성해 볼께요. 프로그램에는 사용자와 상호작용을 하는 Camera 개체가 있습니다. Camera 개체 내부에는 내부 중재자 개체인 InnerMode 형식의 개체가 있고 셔터 스피드를 관리하는 Shutter, 조리개를 관리하는 Iris라 정하였습니다. Camera 형식의 개체는 내부에 InnerMediator 개체와 Iris, Shutter 개체로 구성되어 있습니다. 사용자에 의해 촬영 모드가 변경 요청이 오면 이를 InnerMediator 개체에게 전달합니다. 그리고, 셔터 스피드 값..

반응형