Singleton 싱글턴
2022. 10. 25. 17:44
Design Pattern
Singleton 하나의 클래스에 하나의 인스턴스만 가지는 패턴 장점 : 하나의 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에, 인스턴스를 생성하는 비용이 줄어듬 단점 의존성이 올라감 Test Driven Development에 적합하지 않음. TDD에서는 유닛 테스트를 실행하며, 이때 테스트간 순서를 바꾸어도 실행 결과가 바뀌지 않으면서, 어느 정도 독립성을 가지고 있어야 하는데, 싱글턴은 안됨. //C++11 에서는 static의 세부사항이 변경되었기 때문에(C++17 에서 한번 더 변경됨), 더이상 DCLP //(Double Checked Locking Pattern) 으로 Singleton을 구현하지 않아도 된다. 정적 지역 객체는 //유효기간을 갖지만, GetInstance()가 처음 호출될..

ProtoType Factory
2022. 3. 8. 01:20
Design Pattern
#include using namespace std; class Monster { public: Monster(int ID) : ID{ ID }, type{ Monster::Type::unknown } {} virtual void Attack() = 0; virtual ~Monster() {} protected: enum class Type { unknown, slime, hog }; class Ability { public: int STR, AGI, INT; Ability() : STR{ 0 }, AGI{ 0 }, INT{ 0 }{} Ability(int STR, int AGI, int INT) : STR{ STR }, AGI{ AGI }, INT{ INT }{} }; int ID; Type type;..

Builder
2020. 11. 30. 21:17
Design Pattern
Builder When piecewise object construction is complicated, provide an API for doing it succintly 빌더 패턴의 목적은 여러 복잡한 요소들의 조합이 필요한 객체를 생성해야 하거나 또는 여러 개의 다양한 객체 집합을 생성해야 할 때 객체 생성만을 전담하는 컴포넌트를 정의하여 객체 생성을 간편하게 하는 것이다. 빌더 패턴은 객체의 생성 과정이 충분히 복잡할 때에만 의미가 있다. Building a string out of substrings web server page rendering Concatenate a single std::string my_text += boost::lexical_cast(my_int); printf("%s ..

SOLID Design Principles
2020. 11. 24. 20:28
Design Pattern
추상 클래스를 상속받았지만, 베이스 클래스에 사용하지 않는 함수임에도, 구현해야 한다면, 어떤 원칙이 위배되었는가? ISP (인터페이스 분리 원칙) '사과' 클래스는 '과일' 클래스로부터 상속받았다. '과일'을 매개변수로 하는 함수는 '사과' 에 대해서는 정상적으로 작동하지 않는다. 어떤 원칙에 위배되었는가? LSP (리스코프 치환 원칙) SOLID Single Responsibility Principle(SRP) - 단일 책임 원칙 A class shold only have a single responsibility 단일 객체가 여러개의 책임을 지고 있지 않는가? Open-Closed Princible(OCP) - 개방-폐쇄 원칙 Entities should be open for extension bu..