전체 글 916

MFC 기초

MFC란?Microsoft Foundation Class의 약자로 윈도우 운영체제 환경에서 GUI 프로그램을 쉽고 빠르게 개발하기 위한 클래스 라이브러리입니다. 기본적으로 C++언어의 기본 문법을 알고 있어야 한다! MFC 내부구조 이해를 위한 예제File->New->Project, 'Win32프로젝트' 선택 '빈 프로젝트' 체크 후 마침'소스 파일' 마우스 우클릭->추가->새항목 'C++파일(.cpp)'선택 적당한 이름 입력 후 추가다음의 코드를 입력한다.//////////////////////////////////////////////////////// #include class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); };..

2_new2_예제

예제)메모리 해제가 제대로 되지 않은게 남았는지 자동으로 확인해주는 프로그램Operator new와 Operator delete 재정의 이용,int count = 0; //메모리 할당해준 객체 카운트 세는 변수 //할당한 객체의 파일명, 몇번째 라인인지, 주소, 크기를 저장 struct BLOCK { char file[256]; int line; void* addr; int size; }; BLOCK mem[10000]; // 할당한 메모리 정보를 관리할 배열 //operator new, operator delete 재정의 void* operator new( size_t sz, char* file, int line) { void* p = malloc(sz); strcpy(mem[count].file, f..

개발/C, C++ 2014.07.21

2_new1_new,operator new, operator delete

1. new의 정확한 동작방식1. operator new()라는 함수를 사용해서 메모리 할당2. (1)이 성공하고 객체라면 생성자 호출3. C의 메모리 주소를 해당 타입으로 캐스팅해서 리턴. 2. 생성자/소멸자를 호출하지 않고 메모리만 할당하는 방법은?Point* p = static_cast(operator new(sizeof(Point))); operator delete(p);위의 방법을 이용하면 생성자는 호출되지 않고 메모리만 할당되는 것을 알 수 있다. 3. operator new()를 재정의 해서 메모리 할당을 변경 가능하다(new 자체를 재정의 하는게 아니다) #include using namespace std; void* operator new( size_t sz) { cout

개발/C, C++ 2014.07.20

1_this3_멤버 변수의 포인터

멤버 변수의 포인터class Dialog { public: int color; void Close() {} }; int main() { // 멤버 변수의 포인터 만들기. int Dialog::*p = &Dialog::color; printf("%d\n", p); // 0 Dialog dlg; dlg.*p = 10; // dlg.color = 10 으로 컴파일. } 멤버 변수의 포인터의 경우 멤버 함수의 포인터와 마찬가지로 Dialog::(객체명::)을 붙여주면 된다. 접근하는 방법 역시 역참조를 이용, dlg.*p와 같이 접근하면 된다.(객체를 생성해야 접근 가능) 이 때 멤버변수 포인터 p를 출력하면 0임을 확인할 수 있다.Dialog 클래스에 int a를 추가하고 p를 다시 한번 출력해 보자. cla..

개발/C, C++ 2014.07.20

1_this2_함수포인터의 this

함수포인터에서 this1. 일반 함수포인터에 멤버함수의 주소를 담을 수는 없다.2. 일반 함수포인터에 static 멤버함수의 주소를 담을 수는 있다. 다음의 예제에서.. class Dialog { public: void Close() {} static void Close2() {} }; void foo() {} int main() { void(*f1)() = &foo; //함수포인터 f1 f1(); (*f1)(); void(*f2)() = &Dialog::Close; // error void(*f3)() = &Dialog::Close2; // ok.. this가 없다. } 함수포인터 f1()는 인수가 없는 void 함수를 담는 함수포인터이다. 위의 그림만 봤을 때 f2(), f3() 역시 일치하는 Clo..

개발/C, C++ 2014.07.20

1_ this1

this : 멤버함수를 호출한 객체의 주소를 나타낸다. 1. 일반멤버함수는 첫번째 인자로 this가 추가된다.2. static 멤버함수는 this가 추가되지 않는다. 다음의 Point 클래스에서 class Point { int x, y; public: void set(int a, int b) { x = a; // this->x = a; y = b; // this->y = b; } static void foo(int a) { x = a; } };함수 void set(int a, int b)의 경우 void set(Point* const this, int a, int b)로 컴파일된다. 자신의 객체를 의미하는 this가 추가되고 컴파일된다. 이는 동일한 클래스의 객체가 여러개 생성된다 해도 멤버함수는 하나만..

개발/C, C++ 2014.07.20

7. Command Pattern(커맨드 패턴)

Command Design Pattern(커맨드 패턴) Define 커맨드 패턴을 이용하면 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. Structure - 커맨드 객체는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구사항을 캡슐화 한 것을 의미한다.- 행동과 리시버를 한 객체에 집어넣고, 외부에는 execute()메소드 하나만 외부에 공개한다. 이 메소드 호출에 의해 리시버에서 일련의 작업이 처리된다.- 외부에서는 어떤 객체가 리시버인지, 그 리시버가 무슨일을 하는지 알 수 없고 그냥 execute()메소드만 호출하면 요구사항이 처리된다.A..

6. Singleton Pattern(싱글턴 패턴)

Singleton Design Pattern(싱글턴 패턴) Define 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. Structure>- 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 그리고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 한다. 인스턴스가 필요하면 반드시 클래스 자신을 거치도록 한다.- 또한 어디스든 이 인스턴스에 접근할 수 있도록 만든다. - getInstance()메소드는 정적 메소드로 어디서든 호출 가능,- 생성자를 private로 선언하여 외부에 노출이 되지 않도록 한다.Advantage - 시스템 상 전역으로 관리되고 단하나의 클래스에서만 정보가 유지되는 것을 원할 때 사용..

5. Abstract Factory Pattern(추상 팩토리 패턴)

Abstract Factory Design Pattern(추상 팩토리 패턴) Define 추상 팩토리 패턴에서는 인터펫이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있습니다. Structure 추상 팩토리 패턴을 사용하면 클라이언트에서 추상 인터페이스를 통해 일련의 제품들을 공급받을 수 있다. 이때 실제로 어떤 제품이 생산되는지는 알 필요 없어서 클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있다. PlatformOne, PlatformTwo는 구상 팩토리로, 서로 다른 제품군을 구현한다. 클라이언트에서 제품이 필요하면 이 팩토리 가운데 적당한 걸 골라서 쓰면 되기 때문에 제품 객체의 인스턴스를 직접 만들 필요가 없다. Advantage - 팩토리메소드..

4. Factory Method Pattern(팩토리 메소드 패턴)

Factory Method Design Pattern(팩토리 메소드 패턴) Define 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다. Structure Creator추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공. 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어내는 일은 서브클래스에서만 할 수 있다.사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정 Advantage - 객체의 생성을 한군데서 관리할 수 있다. - 동일한 인터페이스 구현으로 새로운 객체가 추가되더라도..

3. Decorate Pattern(데코레이트 패턴)

Decorator Design Pattern(데코레이터 패턴) Define 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. Structure- 데코레이터(OptionalWrapper)의 슈퍼클래스(Interface)는 자신이 장식하고 있는 객체(CoreFunctionality)의 슈퍼클래스와 같다. Example) Advantage- 클래스의 기능들이 동적으로 변경될 소지가 있을 때 사용- 클래스에 동적으로 추가하는 기능들이 앞으로도 더 추가될 수 있을 때 사용- 클래스에 기능들을 여러개로 조합 될 때 미리 정의해두기 너무 많은 클래스가 생성되므로, 즉시 생성이 가능하게 할 때 사용- 한 객체를 여러개의 데코레이터로..

반응형