일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 싱글턴 패턴
- 빌더
- 프로토타입 중복처리
- 팩터리 패턴
- 단순한 빌더
- 팩터리 메서드
- 싱글톤 패턴
- 모던C++디자인패턴
- 함수형 팩터리
- 브릿지
- 프로토타입
- 빌더 패턴
- 팩터리
- 데커레이터 패턴
- 브릿지 패턴
- 디자인 패턴
- 내부 팩터리
- 그루비 스타일 빌더
- 싱글톤
- 프로토타입 패턴
- 추상 팩터리
- 데커레이터
- 컴포지트 패턴
- 컴포지트
- 싱글턴
- 컴포지트 빌더
- 흐름식 빌더
- 동적 데코레이터
- 동적 데커레이터
- 디자인패턴
- Today
- Total
목록모던C++디자인패턴 (6)
GGym's Practice Notes
데커레이터 패턴 : 어떤 기능에 추가적으로 기능을 덧붙이고 싶을 경우 그 기능들을 Decorator로 만들어서 덧붙이는 방식. 이미 존재하는 타입에 새로운 기능을 추가하면서도 원래 타입의 코드에 수정을 피할 수 있게 해준다. 시나리오 도형을 나타내는 Shape가 기존에 존재하고 있고 이를 상속받아 색상이 있는 도형과 투명한 도형을 추가한다. 나중에 두가지 속성을 모두 필요로 하는 경우가 발생하여 추가로 클래스를 만드는데 결과적으로 두가지 기능을 추가하기 위해 클래스를 3개 만들게 된다. 이런식이면 기능이 하나 추가될때마다 7개의 클래스를 만들어야 할 수도 있다. struct Shape{ virtual string str() const =0; }; struct Circle: Shape{ float radi..
책에서는 직렬화도 소개한다. (모던CPP디자인패턴/https://book.naver.com/bookdb/book_detail.nhn?bid=14742427) 직렬화는 어떠한 객체 데이터를 비트의 나열로 만들어 파일로 저장하거나 네트워크로 전송할 수 있게 하는것을 말한다. 직렬화를 사용하면 객체복제를 쉽게 할 수 있게 만든다. 객체를 비트열로 나타내고 역직렬화를 통해 모든 정보와 내부 구성요소들을 복구 할 수 있다. 이 작업은 복제작업과 동일하다. C++은 아쉽게도 직렬화를 표준으로 지원하지 않는다. Boost 라이브러리를 사용하여 지원하지만 나는 라이브러리나 코드생성기의 도움 없이 코드를 구현하고 싶다... 전체 코드 : #include #include #include #include #include u..
# 객체 생성 아래의 두 객체는 중복된 부분이 있다. 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..
컴포지트 빌더는 객체 하나를 생성하는데 복수의 빌더가 사용되는 경우 사용된다. 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
- 단일 책임 원칙 (Single Responsibility Principle, SRP) - 열림-닫힘 원칙 (Open-Closed Principle, OCP) - 리스코프 치환 원칙 (Liskov Substitution Principle, LSP) - 인터페이스 분리 원칙 (Interface Segregatopm Principle, ISP) - 의존성 역전 원칙 (Dependency Inversion Principle, DIP) 1. 단일 책임 원칙 (Single Responsibility Principle, SRP) - 각 클래스는 단 한가지의 책임을 부여받아 수정할 이유가 단 한가지어야 한다. 메모장 코드를 작성한다고 할때, 아래와 같이 작성가능하다. struct Journal { string ti..