「패턴 그리고 객체지향적 코딩의 법칙」중에서 정리
Factory |
이름 |
Abstract Factory |
연관성 Example ) Class IABFactory ( interface class ) |
private space
「패턴 그리고 객체지향적 코딩의 법칙」중에서 정리
Factory |
이름 |
Abstract Factory |
연관성 Example ) Class IABFactory ( interface class ) |
해킹 아이폰에만 해당됩니다.
무료로 다운 받을 수 있는 사이트 모음
다운 받은 테마를 옮기는 폴더
/private/var/stash/Themesxxxxx
안을 살펴보면 된다. ~ 이상 ㅎ
class GlobalClass { ... static GlobalClass *instance() { if (!s_instance) s_instance = new GlobalClass; return s_instance; } ... }; // Allocating and initializing GlobalClass's // static data member. The pointer is being // allocated - not the object inself. GlobalClass *GlobalClass::s_instance = 0; void foo(void) { GlobalClass::instance()->set_value(1); cout << "foo: global_ptr is " << GlobalClass::instance()->get_value() << '\n'; } 위에서 보는 것처럼 단지 공유 객체 포인터를 static으로만 선언하는 것만으로는불 충분하다. 좀 괜찮게 보일 될려면 GlobalClass::instance() 이렇게 한 꺼풀더 씌우자 |
초기의 간단한 구조에서는 그닥 class diagram이 필요가 없지만
깔끔하게 design pattern 등도 고려가 되어서 잘 구조가 된다.
그렇지만 어느 순간 덧붙이다 보면
class 간 partition이 제대로 이루어 지지 않는다.
이 이유 중 하나가 새로운 기능 추가 시 기존의 class diagram을 보지 않고
보이는 데로 추가를 하기 때문에 발생한다.
이 자료는 http://glotalk.egloos.com/2018168 에서 퍼옴을 밝힙니다.
#include "stdafx.h" |
출력은
A3 dtor |
class간 결합을 interface로 따로 분리됨으로써 class 간 복잡도, 결합도가 떨어진다.
interface는C++ 에서는 class로 표현, JAVA에서는 interface keyword로 표현
C++ 에서 보통 interface를 virtual 로 정의하고 구현은 뒤로 미루는데 이것이 interface정의의 원칙이란다.
Java에서는 interface에서 class에서 정의된 함수들을 그냥 쓰면 되지만
C++ 에서는 interface의 함수들을 이용하기 위해서는 그 interface를 정의된 class의 상속을 통해서
이용이 가능하다. 따라서 다른 class에서 정의된 interface를 사용하기 위해서는 서로 다른 class를 상속
하는 길 밖에는 없다.
전통적 Const 용법
Const char *p = greeting | 비상수 포인터 , 비상수 데이터 |
Char * const p = greeting | 상수 포인터 , 비상수 데이터 |
class에서 const
class TextBlock {
public :
...
const char & operator [] const ( std::size_t position ) const { return text[ position ] ; } // 상수 객체에 대한
const char & operator [] ( std::size_t position ) const { return text[ position ] ; } // 비상수 객체에 대한
...
}
비상수 멤버 호출 | 상수 멤버 호출 |
TextBlock tb("hello"); std::cout<< tb[0]; | const TextBlock tb("hello"); std::cout<< tb[0]; |
여기서 파생되는 유의점
std:;size_t CTexxtBock::length () const
{
// 내부에서 class 변수들을 수정한다면 error
// 왜냐하면 여기서 변수를 수정한다면 상수 멤버를 호출한 것에 대한 것과 모순이 발생
}