개발 321

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- 클래스의 기능들이 동적으로 변경될 소지가 있을 때 사용- 클래스에 동적으로 추가하는 기능들이 앞으로도 더 추가될 수 있을 때 사용- 클래스에 기능들을 여러개로 조합 될 때 미리 정의해두기 너무 많은 클래스가 생성되므로, 즉시 생성이 가능하게 할 때 사용- 한 객체를 여러개의 데코레이터로..

2. Observer Pattern(옵저버 패턴)

Observer Design Pattern(옵저버 패턴) Define 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many)의존성을 정의 Structure- Subject(주제) : 객체에서 옵저버를 등록하거나 옵저버 목록에서 제거할 수 있다. 또한 모든 옵저버에게 연락을 위한 메소드가 있다.- Observer : 옵저버가 될 가능성이 있는 객체는 반다스 observer인터페이스를 구현해야 한다. 이 인터페이스에는 주제의 상태가 바뀌었을 때 호출되는 update()메소드만 존재한다.- ConcreteObserver(ViewOne,ViewTwo) : Observer인터페이스를 구현하면 무엇이든 옵저버 클래스가 될 수 있다. ..

1. Strategy Pattern(전략패턴)

Strategy Design Pattern(스트래티지/전략패턴) Define- 알고리즘군을 정의하고 각각을 캡슐화하여 교환할 수 있도록 만든다. 전략패턴을 사용함으로써 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. Structure - Strategy(전략) : 전략을 이용하기 위한 인터페이스를 결정,- ConcreteStrategy(ImplementationOne, ImplementationTwo) : Strategy의 인터페이스를 실제로 구현, 실제 전략(알고리즘)을 프로그래밍한다.- Context(문맥) : Context는 Strategy를 이용하는 역할, ConcreteStrategy의 인스터스를 가지고 있으며 그것을 이용. Advantage- 코드중복을 줄일 수 있다.- 실행 시 행동을 바..

반응형