반응형

소스 코드 353

[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에..

[C#] 가교 패턴(Bridge Pattern) - 구현

7. 가교 패턴(Bridge Pattern) [그림] 가교 패턴(Bridge Pattern) 클래스 다이어그램 7. 4 구현 가교 패턴에 대한 예제 프로그램은 Module 파트, Lens 파트, Camera순으로 구현하는 과정을 설명하겠습니다. 7.4.1 Module 파트 Module 파트는 구체적 기능을 구현하는 역할을 담당합니다. 여기에서는 피사체를 목적에 맞게 영상 처리하는 기능을 구현하겠습니다. IImageProcessing은 영상 처리 기능을 약속한 인터페이스입니다. 영상 처리하는 기능은 string 형식의 피사체를 입력 인자로 전달 받아 영상 처리된 결과를 string 형식으로 반환하는 ImageProcessing 메서드입니다. ▶ IImageProcessing.cs namespace Brid..

[C#] 적응자 패턴(Adapter Pattern) - 구현

6. 적응자 패턴(Adapter Pattern) 6. 4 구현 6.4.1 첫 번째 프로그램(적응자 패턴을 적용하기 전에 사용하던 프로그램) [그림] 적응자 패턴 적용 전 클래스 다이어그램 첫 번째 프로그램은 적응자 패턴을 사용하기 전에 사용`했던 프로그램을 작성하는 것입니다. 카메라와 사람에 대한 영상 처리를 하는 형식으로 구성된 프로그램을 만들기로 약속했었죠. 먼저, 사람에 대한 영상 처리를 하는 형식에는 피사체를 설정하는 기능과 영상 처리를 시작하는 기능, 사진을 얻어오는 기능을 제공하기로 하였습니다. ▶PImageProcessor.cs namespace BeforeAdapter { class Camera { PImageProcessor pi_processor; public Camera(PImageP..

[C#] 단일체 패턴(Singleton Pattern) - 구현

5. 단일체 패턴(Singleton Pattern) 5. 4 구현 이제 단일체 패턴에 대한 예제 프로그램을 작성해 봅시다. 구현 순서는 메모리 카드, 내부 개체, 디스플레이 장치, 카메라 순으로 하겠습니다. 5.4.1 메모리 카드 메모리 카드에는 사진을 보관하는 메서드가 필요할 것입니다. 그리고 전체 사진의 개수를 확인하기 위한 속성과 특정 번호에 해당하는 사진을 얻어오는 인덱서를 제공하려고 합니다. ▶MemoryCard.cs namespace Singleton { class InnerObject //단일체 클래스 { MemoryCard memorycard =null; public int Now { get; private set; } public static InnerObject Singleton //단..

[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++] 56. string 클래스 흉내내기2

이제 자신의 string 클래스의 멤버 메서드를 하나 하나 구현해 보기로 해요. 제일 먼저 생성자를 구현합시다. string::string(const char *buf) { 먼저 입력 인자가 0(널 포인터)일 때 빈 문자열을 보관할 버퍼를 생성해서 빈 문자열을 복사하세요. if(buf==0)//입력 인자가 0(널 포인터)일 때 { this->buf = new char[1];//크기가 1인 버퍼를 생성 strcpy_s(this->buf,1,""); //공백 문자를 대입 } 입력 인자가 0(널 포인터)가 아닐 때는 입력 문자열 길이를 구하여 버퍼를 생성하고 문자열을 복사하세요. else//입력 인자가 0(널 포인터)가 아닐 때 { int len_p1 = strlen(buf)+1; //입력 문자열의 길이 + ..

[C++] 55. string 클래스 흉내내기1

이번에는 연산자 중복 정의 문법으로 string 클래스와 비슷하게 사용할 수 있는 클래스를 만들어 보아요. 먼저 여기에서 구현할 범위를 정하기 위해 string 클래스를 사용하는 기본적인 사항을 확인하고 넘어갈게요. string 형식은 기본 생성 및 문자열을 입력 인자로 받는 생성을 할 수 있어요. string s; string s2="hello"; string 형식은 비교 연산(==, !=, >, >=,

[C++] 53. iostream 흉내내기

이번에는 cin과 cout으로 출력 및 입력할 때 쉬프트 연산을 사용하는 원리를 살펴보기 위해 iostream 클래스를 흉내내 보기로 할게요. 여기에서 설명하는 것은 원리를 살펴보기 위한 것이지 iostream 클래스의 내부를 정확하게 표현하기 위한 것이 아닙니다. 실제 iostream 클래스는 여기에서 설명하는 것보다 훨씬 정교하고 신뢰성있게 정의하고 있어요. C언어에서 printf 함수로 출력하거나 scanf 함수로 입력받을 때는 포멧 사용자를 사용했었죠. 하지만 C++에서 cin과 cout을 사용할 때는 포멧 사용자 없이 쉬프트 연산을 사용했어요. 어떠한 포멧으로 출력 혹은 입력해야 하는지 표현하지 않아도 알아서 입출력해 주었죠. 이러한 것이 가능한 이유는 클래스에 연산자 중복 정의를 해 주었기 때..

[C++] 52. 함수 개체

이번에는 함수 호출 연산자 중복 정의와 함수 개체를 알아보기로 해요. C++언어에서는 함수 호출 연산자를 중복정의 할 수 있습니다. 함수 호출 연산자의 연산 기호는 ( ) 입니다. 따라서 함수 호출 연산자를 중복 정의할 때 메서드 이름은 operator()입니다. 메서드 뒤에 입력 매개 변수 리스트를 열거하는 ()에는 개발자가 개수와 형식을 결정하고 반환 형식도 개발자가 정합니다. [반환형식] operator() ([입력 매개 변수 리스트]); 그리고 함수 호출 연산자를 중복 정의한 형식의 개체를 함수 개체라고 부릅니다. 함수 개체는 형식 내부에 함수 호출 연산자를 중복 정의하고 있어서 마치 함수처럼 호출하여 사용할 수 있습니다. 먼저 간단하게 함수 호출 연산자 중복 정의를 사용하여 함수 개체를 함수처럼..

반응형