본문 바로가기
반응형

개발/Architecture & Design Pattern37

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 연결과 같은 하위 모듈에 대한 의존성을 해결하기 위해 인터페이스를 제공하고, 상위 모듈은 해당 인터페이스를 구현하게 하여 실제 코드가 변경되더라도 상위 모듈에 영향을 미치지 않게 된다. 먼저 아래의 의존 역전 원칙 위반 사례를 보.. 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.
C++ - 반복자, 이터레이터 패턴 (Iterator Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 연산자 오버로딩을 이용하여 구조체 출력하기 - 클래스 다이어그램 그리기 - 스마트 포인터 : unique_ptr 반복자, 이터레이터 패턴 (Iterator Pattern) - 행동 패턴 - 객체의 컬렉션을 순회하고 요소에 접근할 수 있는 방법을 제공하는 패턴 - 컬렉션의 요소에 대한 구체적인 구현을 노출시키지 않고 컬렉션을 순회 구현 - Iterator (반복자) : 컬렉션의 요소를 순회하고 접근하는 인터페이스, next()와 hasNext()를 제공 - ConcreteIterator : Iterator 인터페이스를 구현하여 실제 컬렉션에 대한 순회 및 접근 동작 구현 - Aggregate (집합체) : 어떤.. 2024. 2. 4.
C++ - 옵저버 패턴 (Observer Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 옵저버 패턴 (Observer Pattern) - 행동 패턴 - 객체 간의 일대다 종속성을 정의하는 패턴 - 객체의 상태가 변경될 때, 해당 객체에 종속된 다른 객체들이 자동으로 알림을 받아 갱신하도록 한다. 구현 - 주제(Subject) 객체는 옵저버들을 관리하고 상태의 변경을 감지하고, 옵저버들에게 알림을 보낸다. - 옵저버(Observer) 객체는 주제의 상태 변경을 감지하고 처리한다. - 주제와 옵저버 클래스를 추상화하여 각각의 기본 동작을 정의하고 구체적인 클래스를 구현한다. 장점 - OCP(개방-폐쇄 원칙), 기존 코드를 변경하지 않고 새로운 주제나 옵저버를 추가할 수 있다. - 주제와 옵저버의 관계가 느슨.. 2024. 1. 30.
C++ - 전략, 스트래티지 패턴 (Strategy Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 - 인터페이스 vs 추상 클래스 (Java, C++ 비교) - 스마트 포인터 : unique_ptr 전략, 스트래티지 패턴 (Strategy Pattern) - 행동 패턴 - 알고리즘을 캡슐화하여 동적으로 교체할 수 있도록 하는 패턴 - 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 구현 - 전략 패턴에서 사용할 각 알고리즘에 대한 인터페이스를 정의 (전략 인터페이스, Strategy Interface) - 정의된 인터페이스를 구현하여 알고리즘을 구체화하는 전략 클래스 작성 (구체적인 전략, Concrete Strategies) - 컨텍스트 클래스에 전략 객체.. 2024. 1. 29.
C++ - 싱글턴 패턴 (Singleton Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - call_once로 함수를 한 번만 호출하기 - atomic으로 원자적 연산 처리하기 (vs mutex) 싱글턴 패턴 (Singleton Pattern) - 생성 패턴 - 특정 클래스에 대해 객체 인스턴스가 하나만 만들어지도록 하고, 전역 접근을 제공하는 패턴 - 전역 변수에 객체를 대입하면 Application이 시작되고 종료되기까지 자원을 차지하지만, 싱글턴 패턴은 필요할 때만 객체를 만들 수 있다. - 실제로 객체가 필요하면 인스턴스를 직접 만들지 않고, 인스턴스를 요청하도록 구현한다. (getInstance) 구현 - 다른 객체에서 new 연산자를 사용하지 못하도록 생성자를 private으로 정의 - .. 2024. 1. 26.
반응형