본문 바로가기
반응형

C++93

C++ - 상태, 스테이트 패턴 (State Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 - friend로 private 멤버 출력하기 - 스마트 포인터 : unique_ptr 상태, 스테이트 패턴 (State Pattern) - 행동 패턴 - 객체의 상태에 따라 객체의 행동을 바꾸는 패턴 - 상태에 대한 행동을 캡슐화하여, 위임을 이용해 필요한 행동을 선택한다. - 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 구현 - State Class : 상태를 나타내는 추상 클래스 또는 인터페이스를 정의, 객체의 특정 상태에 따른 행위를 정의 - Context Class : 상태를 가지고 있는 객체를 나타내는 클래스. 상태 객체를 참조하고, 상태 변경 메서드 제공 - .. 2024. 2. 20.
C++ - 추상 팩토리 패턴 (Abstract Factory Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 팩토리 메서드 패턴 - 클래스 다이어그램 그리기 - 스마트 포인터 : unique_ptr - friend로 private 멤버 출력하기 추상 팩토리 패턴 (Abstract Factory Pattern) - 생성 패턴 - 관련 있는 객체들의 생성을 추상화하여 객체 생성을 캡슐화하는 방법을 제공하는 패턴 - 클라이언트가 구체적인 클래스를 알지 못해도, 해당 클래스와 상호작용을 할 수 있도록 도와준다. 구현 - Abstract Factory : 관련된 객체들의 집합을 생성하기 위한 인터페이스를 정의 - Concrete Factory : Abstract Factory 인터페이스를 구현하여 실제로 객체를 생성 - Ab.. 2024. 2. 14.
C++ - friend로 private 멤버 출력하기 (Printing private members using friend) C, C++ 전체 링크 참고 - 연산자 오버로딩을 이용하여 구조체 출력하기 - 스마트 포인터 : unique_ptr 아래 코드를 실행하면 컴파일 에러가 발생한다. #include #include using namespace std; class Bread { public: Bread(string n, int p) : name(n), price(p) {} string getName() const { return name; } void setName(const string &n) { name = n; } int getPrice() const { return price; } void setPrice(const int p) { price = p; } private: string name; int price; };.. 2024. 2. 13.
SOLID - 객체 지향 설계 5대 원칙 Architecture & Design Pattern 전체 링크 객체지향 설계 5대 원칙 (SOLID) 단일 책임 원칙 (SRP, Single Responsibility Principle) - 소프트웨어의 모듈 또는 클래스는 단 하나의 책임만 가져야 한다. - 클래스를 바꾸는 이유는 한 가지뿐이어야 한다. - 유지 보수, 재사용성, 테스트 용이성에 이점이 있다. 개방-폐쇄 원칙 (OCP, Open-Closed Principle) - Open : 소프트웨어의 기능을 추가할 때, 기존의 코드를 변경하지 않고 확장할 수 있어야 한다. - Closed : 이미 동작하는 코드에 대한 변경이 필요 없이 새로운 기능을 추가할 수 있어야 한다. - 클래스는 확장에 대해서는 열려 있어야 하고, 코드 변경에 대해서는 닫혀.. 2024. 2. 12.
C++ - 인터페이스 분리 원칙 (ISP, Interface Segregation Principle) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 전략, 스트래티지 패턴 인터페이스 분리 원칙 (ISP, Interface Segregation Principle) - 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다. - 일반적인 인터페이스들은 더 작고, 구체적인 인터페이스들로 분리해야 한다. 아래의 인터페이스 분리 원칙 위반 사례를 보자. 흔히 노동자들은 일을 하지만, 밥도 먹어야 하고 잠도 자야 한다. class Worker { public: virtual void work() = 0; virtual void eat() = 0; virtual void sleep() = 0; }; 예를 들어 프로그래머는 다음과 같이 work / eat .. 2024. 2. 12.
C++ - 리스코프 치환 원칙 (LCP, Liskov Substitution Principle) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 리스코프 치환 원칙 (LCP, Liskov Substitution Principle) - 객체의 하위 타입은 기본 타입으로 대체될 수 있어야 한다. - 상속 관계에 있는 클래스들 사이에서 자식 클래스는 부모 클래스의 기능을 완전히 대체해야 한다. 먼저 아래의 리스코프 치환 원칙 위반 사례를 보자. #include using namespace std; class Rectangle { protected: int width, height; public: Rectangle(int width, int height) : width(width), height(height) {} virtual void setWidth(int w) .. 2024. 2. 12.
C++ - 팩토리 메서드 패턴 (Factory Method Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 - 스마트 포인터 : unique_ptr - 의존 역전 원칙 팩토리 메서드 패턴 (Factory Method Pattern) - 생성 패턴 - 객체를 생성하는 과정을 서브 클래스에서 결정할 수 있도록 하는 패턴 - 객체 생성에 대한 구체적인 구현을 서브 클래스로 미룬다. - 클라이언트는 객체 생성에 대한 구체적인 클래스를 알 필요 없이, 추상 클래스를 통해 인터페이스에만 의존할 수 있다. 구현 - 객체 생성을 처리하는 메서드가 있는 인터페이스나 추상 클래스를 생성한다. - 팩터리 메서드가 생성할 객체의 구상 클래스를 만든다. - 인터페이스나 추상 클래스를 구현하여 팩토리 클래스를 만든.. 2024. 2. 12.
C++ - 단일 책임 원칙 (SRP, Single Responsibility Principle) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 단일 책임 원칙 (SRP, Single Responsibility Principle) - 소프트웨어의 모듈 또는 클래스는 단 하나의 책임만 가져야 한다. - 클래스를 바꾸는 이유는 한 가지뿐이어야 한다. - 유지 보수, 재사용성, 테스트 용이성에 이점이 있다. 먼저 단일 책임 원칙 위반 사례를 보자. 아래의 예시는 fstream의 ofstream과 ifstream을 이용하여 파일을 쓰고 읽을 수 있는 FileManager 클래스다. class FileManager { public: void writeFile(const string& filename, const string& content) { ofstream file.. 2024. 2. 12.
C++ - 개방-폐쇄 원칙 (OCP, Open-Closed Principle) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 연산자 오버로딩을 이용하여 구조체 출력하기 개방-폐쇄 원칙 (OCP, Open-Closed Principle) - Open : 소프트웨어의 기능을 추가할 때, 기존의 코드를 변경하지 않고 확장할 수 있어야 한다. - Closed : 이미 동작하는 코드에 대한 변경이 필요 없이 새로운 기능을 추가할 수 있어야 한다. - 클래스는 확장에 대해서는 열려 있어야 하고, 코드 변경에 대해서는 닫혀 있어야 한다. 먼저 개방-폐쇄 원칙 위반 사례를 보자. 아래 코드는 사각형과 원의 넓이를 출력하는 예시다. #include using namespace std; class Rectangle { public: Rectangle.. 2024. 2. 12.
반응형