일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 팩터리 메서드
- 디자인 패턴
- 프로토타입
- 팩터리 패턴
- 데커레이터
- 내부 팩터리
- 동적 데코레이터
- 데커레이터 패턴
- 프로토타입 패턴
- 빌더
- 추상 팩터리
- 컴포지트 빌더
- 컴포지트
- 싱글톤 패턴
- 싱글턴 패턴
- 싱글턴
- 프로토타입 중복처리
- 컴포지트 패턴
- 함수형 팩터리
- 디자인패턴
- 빌더 패턴
- 브릿지
- 모던C++디자인패턴
- 단순한 빌더
- 흐름식 빌더
- 동적 데커레이터
- 브릿지 패턴
- 팩터리
- 그루비 스타일 빌더
- 싱글톤
- Today
- Total
목록Design Pattern/Modern C++ 디자인패턴 (19)
GGym's Practice Notes
# 객체 생성 아래의 두 객체는 중복된 부분이 있다. contact john{ "John Doe", Address{"123 East Dr", "London", 10}}; contact jane{ "Jane Doe", Address{"123 East Dr", "London", 11}}; john과 jane은 사무실 방만 다르고 같은 건물에서 일하고 있다. (다른 사람들도) 수많은 객체가 같은 값으로 중복되게 초기화 되는 작업이 발생한다. 프로토타입 패턴은 객체의 복제가 주요기능이다. # 평범한 중복처리 복제의 목적이 값을 사용하는 것에 있고, 복제 대상 객체의 모든 항목이 값으로만 되어있다면 복제하는데 문제 될 것이 없다. 예로 연락처와 주소가 다음과 같이 정의되어 있다면, struct Address{ s..
# 추상팩터리 그동안 객체 한개를 생성하는 경우를 살펴봤다. 드물지만 여러 종류의 연관된 객체를 생성해야 할 경우도 있다. 추상 팩터리는 그러한 경우를 위한 패턴이다. 뜨거운 차와 커피를 판매하는 카페를 운영해야한다고 가정했을때, 이 두 음료는 다른 장비를 이용해 만들어진다. 다음과 같이 뜨거운 음료를 추상화하는 HotDrink를 정의한다. struct HotDrink{ virtual void prepare(int volume) = 0; }; struct Tea : HotDrink{ void prepare(int volume) override{ cout
# 시나리오 직교 좌표계의 좌표점 정보를 저장하려 한다고 하면 아래와 같이 구현할 것이다. struct Point{ // 직교 좌표계 생성자 Point(const float x, const float y) : x{x}, y{y} {} // 극 좌표계 생성자 Point(const float r, const float theta){ x = r * cos(theta); y = r * sin(theta); } // 두개의 생성자 오버로딩이 겹친다... (float, float) float x, y; // 직교 좌표계 좌표값 } 이때 직교좌표계가 아닌 극좌표계를 추가하고 극좌표계의 좌표값으로 저장한다고 하면 문제가 된다. 쉽게 생각하면 극좌표계용 생성자를 추가하면 되지 않을가 싶지만 직교 좌표계의 생성자와 구분이..
컴포지트 빌더는 객체 하나를 생성하는데 복수의 빌더가 사용되는 경우 사용된다. BuilderBase에 여러개의 builder를 두어 객체가 생성되게 한다. 객체가 생성될때는 아래와 같이 생성된다. Person p = Person::create() .lives().at("123 London Road").with_postcode("SW1 1GB").in("London") .works().at("PragmaSoft").as_a("Consultant").earning(10e6); * 저자는 참조를 사용하였지만 코드가 에러를 계속 에러를 뱉어낸다. 아마 PersonBuilder에서 생성된 객체가 PersonBuilderBase로 참조될 때 유지가 안되는 것 같다. 참조를 포인터로 변경하여 에러를 고쳤다. - 전체..
C++ 에서도 HTML에 호환되는 DSL을 효과적으로 만들 수 있다. DSL (Domain Specific Languege) : 도메인 특화 언어 관련 특정 분야에 최적화된 프로그래밍 언어. (*Groovy, Kotlin에서 생성 지원) 해당 분야 또는 도메인의 개념과 규칙을 사용 아래와 같은 태그를 생성한다. struct Tag{ string name; string text; vector children; vector attribute; friend ostream& operator
빌더 패턴은 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한 줄로 생성할 수 없는 객체를 다룬다. - 시나리오 웹 페이지를 그리기위한 컴포넌트들을 생성해야 한다고 할때 각각의 HtmlElement를 생성하는 과정을 간소화 한다. 객체 지향 스타일을 채용하여 HtmlElement 클래스를 정의하여 각 html 태그에 대한 정보를 저장한다. struct HtmlElement{ string name; string text; vector elements; string str(int indent = 0) const{ // 컨텐츠를 양식에 맞추어 출력 } HtmlElement(){} HtmlElement(const string& name, const string& text) : ..