반응형

전체 글 2934

[C#] 4. 원형 패턴(Prototype Pattern) - 구현

4. 원형 패턴(Prototype Pattern) 4. 4 구현 이제 원형 패턴에 대한 예제 프로그램을 구현해 봅시다. 구현 순서는 줌 렌즈, 줌 렌즈 생산 라인, 렌즈 공장과 테스트 코드 순서로 구현할께요. 4.4.1 줌 렌즈 여기에서는 원형 패턴을 사용할 것이므로 다양한 줌 렌즈를 일반화 관계를 사용하지 않고 하나의 ZoomLens 클래스에서 속성만 다르게 주고 자신을 복사하는 메서드를 제공하기로 할게요. 이에 줌 렌즈의 생성자에서는 줌 레벨의 최소값과 최대값, 초점 거리의 최소값과 최대값을 인자로 전달받아 생성하도록 할게요. 원형 패턴을 사용하지 않고 일반화 관계를 사용한다면 많으 수의 파생 클래스가 필요할 것입니다. C#에서는 이와 같이 자신을 복제 가능한 형식들을 위해 IConeable 인터페이..

[C#]4. 원형 패턴(Prototype Pattern) - 설계(Design)

4. 원형 패턴(Prototype Pattern) 4. 3 디자인 여기에서는 줌 렌즈와 줌 렌즈 생산 설비 형식으로 구성된 예를 보여드릴게요. 줌 렌즈에는 자신을 복제할 수 있는 메소드를 제공하고 있어야겠지요. 클래스 이름은 ZoomLens라 정합시다. 줌 렌즈 생산 설비는 모형 줌 렌즈를 하나 갖게 할 것입니다. 그리고 제품 생산요청이 들어오면 모형을 복제한 줌 렌즈를 반환합니다. 줌 렌즈 생산 설비에 대한 클래스 이름은 ProLine이라 하겠습니다. [그림 4] 원형 패턴 설계 예제 클래스 다이어그램 2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 4. 원형 패턴(Prototype Pattern) - 개요, 시나리오 2016/04/25 - [프로그래밍 기..

[C#] 4. 원형 패턴(Prototype Pattern) - 개요, 시나리오

4. 원형 패턴(Prototype Pattern) 4.1 개요 원형 패턴은 미리 만들어진 개체를 복사하여 개체를 생성하는 패턴을 말합니다. 그리고 이때 미리 만들어진 개체를 원형 개체라 부릅니다. 일반화 관계로 표현할 때 파생 클래스의 개수가 과도히 많아지고 각 클래스의 메서드에서 수행하는 알고리즘에 차이가 없고 생성 시에 개체의 속성값만 다르다면 원형 패턴을 사용하는 것이 효과적입니다. 4. 2 시나리오 다음 주에는 거제도와 통영으로 2박 3일 여행을 가기로 하였습니다. 이번 기회에 괜찮은 줌 렌즈를 하나 구매하려고 EHLand 쇼핑몰을 검색해 보았습니다. EHLand 쇼핑몰에는 다양한 형태의 줌 렌즈들이 있는데 이들 중에 무엇을 사는 것이 좋은지 생각하다 보니 어떠한 원리로 만들어져 있는지 궁금해 졌..

[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 구현

3. 팩토리 메서드 패턴(Factory Method Pattern) [그림] 팩토리 메서드 패턴(Factory Method Pattern) 예제 클래스 다이어그램 3. 4 구현 팩토리 메서드 패턴 예제 프로그램은 EHApp, IView, MyView, MyApp, 테스트 코드 순으로 구현하겠습니다. 3.4.1 EHApp EHApp에는 뷰 개체를 생성하는 메서드를 약속합니다. 그리고 초기화, Run, 해제순으로 수행하는 뼈대를 제공하며 초기화에서는 뷰 개체를 생성하는 메서드를 호출하여 뷰 개체를 설정할게요. ▶EHApp.cs namespace FactoryMethod { interface IView { void Show();//보여주기 기능에 대한 메서드 약속 } } ▶MyView.cs using Syst..

[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 설계(Design)

3. 팩토리 메서드 패턴(Factory Method Pattern) 3. 3 디자인 팩토리 메서드 패턴에 대한 예제 프로그램을 디자인해 봅시다. 예제 프로그램의 시나리오에는 응용 프로그램과 뷰로 구성할게요. 응용 프로그램은 초기화에서 메인 뷰 개체를 생성하고 응용에 필요한 초기 작업을 수행합니다. 그리고 Run에서 메인 뷰가 활성화되어 사용자와 상호 작용을 수행합니다. 해제에서는 응용에서 사용한 자원을 해제합니다. 이와 같은 기능들에 대한 필수적인 기능을 수행하게 구현하고 메인 뷰 개체를 생성하는 메서드를 약속한 추상 클래스를 EHApp라고 정할게요. 그리고 활성화 가능한 기능을 약속한 인터페이스 IView를 정의할게요. 이처럼 기본 뼈대를 정의해 놓으면 실제 응용을 제작할 때에는 목적에 맞게 상호 작용..

[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 개요, 시나리오

3. 팩토리 메서드 패턴(Factory Method Pattern) 3.1 개요 프로그래밍하다 보면 같은 방법으로 사용할 수 있는 여러 종류의 개체를 일반화하여 기반 클래스를 정의하고 이를 기반으로 파생 클래스로 정의하는 것은 매우 흔합니다. 이 경우에 사용하는 곳에서 구체적으로 어떠한 개체를 생성해서 사용할 지에 대하여 개발 초기 단계에서 결정할 수 없다면 어떻게 하면 좋을까요? 팩토리 메서드 패턴을 이용하면 이러한 고민을 해결할 수 있습니다. 추상 팩토리 클래스에서는 사용할 개체(추상 클래스)를 생성하는 것에 대해 약속만 합니다. 대신 파생 팩토리 클래스에서 구체적으로 어떠한 개체를 생성할 것인지 구현합니다. 이처럼 구체적인 개체를 생성하는 부분을 분리하면 추상 팩토리 클래스에서는 어떠한 개체를 생성..

[C#] 2. 빌더 패턴(Builder Pattern) - 구현

2. 빌더 패턴(Builder Pattern) 2. 4 구현 이제 빌더 패턴에 대한 예제 프로그램을 구현해 봅시다. 구현 순서는 사진, 사진 빌더, 카메라 순으로 하겠습니다. 2.4.1 사진 사진은 피사체와 이에 대한 이미지를 갖는 형식으로 정의를 할께요. ▶Picture.cs namespace Builder { abstract class PictureBuilder { public Picture Picture { get; protected set; } public abstract void SetSubject(string subject); //상을 맺히는 기능 public abstract void Change();//이미지를 수정하는 기능 } } SmoothBuilder에서는 약속한 기능을 구체적으로 구현..

[C#] 2. 빌더 패턴(Builder Pattern) - 설계

2. 빌더 패턴(Builder Pattern) 2. 3 디자인 이번에는 카메라와 사진, 사진 빌더로 빌더 패턴에 대한 예를 들려고 합니다. 카메라는 사진을 찍는 기능이 있고 효과를 줄 수 있게 하려고 합니다. 대신 효과를 주는 부분을 사진 빌더를 통해 수행하게 할 것입니다. 카메라는 디렉터 역할을 하며 Camera 이름의 클래스로 구현하겠습니다. 사진은 카메라를 통해 사용자가 얻고자 하는 개체로 Picture라고 정하겠습니다. 사진 빌더는 빛을 모아서 피사체를 상으로 맺히는 기능과 이미지를 수정하는 기능이 있게 합시다. 그리고 이러한 기능을 약속한 추상 클래스 PictureBuilder를 정의할게요. 빌더의 종류에는 낮에 사용하는 SmoothBuilder와 밤에 사용하는 REPreventBuilder를 ..

[C#] 2. 빌더 패턴(Builder Pattern) - 개요, 시나리오

2. 빌더 패턴(Builder Pattern) 2.1 개요 프로그래밍하다 보면 여러 요소로 구성되는 개체가 있습니다. 그리고 이와 같은 개체를 생성하는 방법이 목적에 따라 다양한 경우가 생깁니다. 이 경우에 빌더 패턴은 목적에 따른 개체를 생성하는 과정에 대한 약속과 각 과정에서 수행할 구체적인 알고리즘을 분리하여 개체를 생성하는 패턴입니다. 빌더 패턴에서 빌더는 추상 클래스로 개체를 생성하는 과정들을 약속합니다. 빌더를 기반으로 파생한 클래스에서는 생성 과정들에 대해 구체적으로 구현합니다. 이처럼 정의하면 빌더를 사용하는 곳에서는 서로 다른 구조를 갖는 개체를 같은 방법으로 생성할 수 있습니다. 2. 2 시나리오 우리 가족은 매주 토요일에는 여행을 갑니다. 여러분도 아시다시피 우리 가족은 사진을 찍는 ..

[C#] 1. 추상 팩토리 패턴 (Abstract Factory Pattern) - 구현

1. 추상 팩토리 패턴 (Abstract Factory Pattern) 1. 4 구현 이제 구체적으로 구현해 봅시다. 먼저, 카메라와 렌즈를 구현하고 팩토리 부분을 구현한 후에 마지막으로 테스터를 구현합시다. 1.4.1 렌즈 렌즈의 기능은 ITake 인터페이스로 정의하고 상을 맺히는 기능을 약속합시다. EvLens와 HoLens는 ITake를 기반으로 상을 맺히는 기능을 구체적으로 구현합시다. 이처럼 인터페이스를 정의하고 이를 기반으로 구현하면 표준화된 인터페이스를 사용할 수 있어서 사용방법을 익히는 비용을 줄일 수 있습니다. ▶ITake.cs using System; namespace AbstractFactory { class EvLens:ITake { public void Take() //ITake에..

반응형