반응형 개발/Architecture & Design Pattern41 SOLID - 객체 지향 설계 5대 원칙 Architecture & Design Pattern 전체 링크 객체지향 설계 5대 원칙 (SOLID)- SW 설계를 더 유연하고, 유지보수하기 쉽게 만드는 것을 목적으로 하는 원칙.- 각 원칙은 특정한 설계 문제를 해결하고, 코드 품질을 높이는 데 도움을 준다. 단일 책임 원칙 (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. C++ - 의존 역전 원칙 (DIP, Dependency Inversion Principle) C, C++ 전체 링크Architecture & Design Pattern 전체 링크 참고- 팩토리 메서드 패턴 의존 역전 원칙 (DIP, Dependency Inversion Principle)- 구체화에 의존하지 말고 추상화에 의존해야 한다.- 상위 모듈은 하위 모듈에 의존해서는 안 되며, 모든 모듈은 추상화된 것에 의존해야 한다.- 이 원칙으로 하위 모듈의 변경이 상위 모듈에 영향을 주지 않고, 상위 모듈이 하위 모듈에 종속되지 않도록 한다.- 예를 들어, DB 연결과 같은 하위 모듈에 대한 의존성을 해결하기 위해 인터페이스를 제공하고, 상위 모듈은 해당 인터페이스를 구현하게 하여 실제 코드가 변경되더라도 상위 모듈에 영향을 미치지 않게 된다.먼저 아래의 의존 역전 원칙 위반 사례를 보자.#inc.. 2024. 2. 12. C++ - 데코레이터 패턴 (Decorator Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 - 스마트 포인터 : unique_ptr - 템플릿으로 클래스 상속하기 데코레이터 (Decorator Pattern) - 구조 패턴 - 기존 객체의 동작을 수정하지 않고, 그 객체의 기능을 확장하거나 수정하는 패턴 - 런타임에 동적으로 객체의 기능을 추가하거나 수정할 수 있다. 구현 - Component : 데코레이터와 구체적인 컴포넌트를 동일한 타입으로 처리하는 추상 클래스 / 인터페이스 - ConcreteComponent : 기본 동작을 구현하는 컴포넌트 - Decorator : 컴포넌트를 상속하고, 동적으로 기능을 추가, 변경하는 메서드를 가지는 추상 클래스 / 인터페이스 - C.. 2024. 2. 10. C++ - 복합체, 컴포지트 패턴 (Composite Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 반복자, 이터레이터 패턴 (Iterator Pattern) - 스마트 포인터 : unique_ptr 복합체, 컴포지트 패턴 (Composite Pattern) - 구조 패턴 - 객체들을 트리 구조로 구성하여 부분-전체 계층 구조(part-whole hierarchy)를 표현하는 패턴 - 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체(composite)를 똑같은 방식으로 다룰 수 있다. 구현 - Component (구성 요소) : 인터페이스 또는 추상 클래스를 정의, 복합 객체와 개별 객체에 공통된 동작을 정의 - Leaf (원소) : Component를 구현, 단일 객체, 메서드를 구현 - Com.. 2024. 2. 9. 이전 1 2 3 4 5 다음 반응형