반응형

소프트웨어 설계 73

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

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

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

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

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

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 13.1 개요 이번에는 프락시 패턴 중에서 가상 프락시에 대해 살펴보기로 합시다. 가상 프락시는 실제 개체의 특정 행위를 수행하는 비용이 클 경우 사용이 됩니다. 사용자가 가상 프락시 개체를 통해 비용이 많이 드는 작업을 요청을 했을 시에 가상 프락시 개체는 이 작업을 별도의 쓰레드에서 수행하게 명령만 내립니다. 이를 통해 사용자는 비용이 큰 작업을 수행 요청했을 시에 수행이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있게 됩니다. 13. 2 시나리오 여수 엑스포를 다녀와서 사진 보정 작업을 수행하였습니다. 그리고, 이번에는 사진들을 소셜 사이트에 올려볼까 하는데 사진들의 사이즈가 너무 커서 모두 줄이고 올려야 했습니다. 사진 사이즈..

[C#] 플라이급 패턴(Flyweight Pattern) - 구현

11. 플라이급 패턴(Flyweight Pattern) [그림] 플라이급 패턴(Flyweight Pattern) 클래스 다이어그램 11. 4 구현 플라이급 패턴의 예제 프로그램은 Meta, MetaPool, PictureFile, 데모 코드 순으로 구현합시다. 11.4.1 Meta Meta 형식에서는 카메라의 Body 종류에 대한 열거형 멤버와 렌즈 종류에 해당하는 열거형 멤버, 조명에 대한 열거형 멤버를 갖고 있게 합시다. 그리고 같은 멤버의 값을 가졌는지 비교하는 메서드와 이들 정보를 보여주는 메서드를 제공할 것입니다. ▶ Meta.cs using System.Collections.Generic; namespace Flyweight { class MetaPool // Meta 개체들을 관리하는 클래스..

[C#] 플라이급 패턴(Flyweight Pattern) - 개요, 시나리오

11. 플라이급 패턴(Flyweight Pattern) 11.1 개요 프로그램에서 개체가 많아지면 메모리가 많이 차지하게 됩니다. 이럴 때 메모리 효율을 높일 필요성이 있다면 무엇을 해야 할까요? 플라이급 패턴은 이러한 문제를 해결하기 위한 하나의 방법입니다. 플라이급 패턴은 개체의 멤버 필드 중에 각 개체가 반드시 갖고 있어야 할 멤버와 여러 개체가 공유해서 사용할 수 있는 멤버로 분리하는 작업에서부터 출발합니다. 공유해서 사용할 수 있는 멤버가 가질 수 있는 상태의 종류가 개체의 수보다 상대적으로 적다면 플라이급 패턴을 사용하여 메모리 효율을 높일 수 있습니다. 플라이급 패턴에서는 공유해서 사용할 수 있는 상태들을 공유 풀에 형성합니다. 그리고 각 개체는 특정 상태를 참조합니다. 만약, 개체의 수가 ..

[C#] 퍼사드 패턴(Facade Pattern) - 구현

10. 퍼사드 패턴(Facade Pattern) [그림] 퍼사드 패턴(Facade Pattern) 클래스 다이어그램 10. 4 구현 예제 프로그램은 Picture, Compensator, PictureManager, SmartManager, 데모 코드 순으로 설명하겠습니다. 10.4.1 Picture Picture 형식에서는 멤버 필드로 색조, 명도, 채도가 있고 멤버 속성으로 이름을 제공하겠습니다. 그리고 사진을 수정하는 메서드, 이름이 같은지를 비교하는 메서드, 정보를 보여주는 메서드를 제공할게요. ▶ Picture.cs namespace Facade { class Compensator //하위 계층 서비스 { public void Change(Picture picture, int tone, int ..

[C#] 퍼사드 패턴(Facade Pattern) - 개요, 시나리오

10. 퍼사드 패턴(Facade Pattern) 10.1 개요 프로그래밍하다 보면 여러 종류의 라이브러리를 사용해야 하는 경우가 발생합니다. 그리고 실제 각 라이브러리에 있는 모든 기능을 사용할 필요가 없는 경우가 많지요. 이럴 때 상위 수준의 라이브러리를 만들어서 사용하기 쉽게 제공할 수 있습니다. 이처럼 상위 수준에서 인터페이스를 정의하여 하위 수준의 서브 시스템의 기능을 사용할 수 있게 하고자 할 때 퍼사드 패턴을 사용하면 효과적입니다. 퍼사드 패턴에서는 하위 수준의 여러 서브 시스템에서 제공되는 기능들을 상위 수준에서 단순화시켜 사용하기 쉽게 해 줍니다. 또한, 이를 통해 여러 서브 시스템과의 복잡한 관계를 느슨하게 만들어 주어 하위 시스템과 독립성을 갖게 해 줍니다. 10. 2 시나리오 오전 강..

[C#] 장식자 패턴(Decorator Pattern) - 구현

9. 장식자 패턴(Decorator Pattern) [그림] 장식자 패턴(Decorator Pattern) 클래스 다이어그램 9. 4 구현 장식자 패턴의 예제 프로그램은 Picture, IChange, 보정기, 데모 순으로 구현할게요. 9.4.1 Picture Picture 클래스는 장식자 패턴에 포함되는 형식은 아닙니다. 단순히 예제 프로그램을 위해 정의한 형식으로 멤버 필드로 색조, 명도, 채도 값을 갖고 있고 이들 값을 변경하는 메서드와 보여주는 메서드를 갖도록 구현합시다. ▶ Picture.cs namespace Decorator { interface IChange { void Change(Picture picture,int tone,int brightness,int saturation); } }..

[C#] 장식자 패턴(Decorator Pattern) - 개요, 시나리오

9. 장식자 패턴(Decorator Pattern) 9.1 개요 프로그래밍하다 보면 너무 다양한 형태로 기능을 확장해야 할 경우가 발생합니다. 예를 들면 여러 종류의 단위 기능이 있고 이들을 조합해서 사용할 경우입니다. 사진에 원 장식을 하고 여기에 사각형 장식을 하고 여기에 삼각형 장식을 하는 등의 작업을 반복할 수 있는 경우처럼 말이죠. 이 같은 경우에 단위 기능들에 대한 조합된 기능을 수행할 수 있는 개체 형식들을 정의하기 위해서는 무수히 많은 수의 파생 클래스를 정의해야 합니다. 이때 장식자 패턴을 사용하면 장식자 개체에서 필요한 단위 기능을 하는 형식 개체를 포함을 시키는 것으로 이를 해결할 수 있습니다. 이 같은 경우에 장식자 패턴은 단위 기능을 수행하는 형식과 장식자 형식을 정의하고 일반화하..

[C#] 복합체 패턴(Composite Pattern) - 구현

8. 복합체 패턴(Composite Pattern) [그림] 복합체 패턴(Composite Pattern) 클래스 다이어그램 8. 4 구현 복합체 패턴의 예제 프로그램을 구현하는 순서는 Tree, Category, Path, 데모 코드 순으로 하겠습니다. 8.4.1 Tree Tree 클래스는 Path와 Category를 같은 방법으로 사용할 수 있게 하려고 Path에서 수행할 수 있는 기능과 Category에서 할 수 있는 모든 기능에 대해 약속 또는 구현해 주어야 합니다. Path에서는 자신의 정보를 보여주는 기능이 필요합니다. Category에서는 자신의 정보 및 자식 요소들에 대한 정보를 보여주는 기능이 필요합니다. 이에 대한 구체적 구현이 추상 메서드로 약속만 하겠습니다. 또한, Category에..

반응형