본문 바로가기
반응형

개발/Architecture & Design Pattern37

UML - 유스케이스 다이어그램 (Use Case Diagram) Architecture & Design Pattern 전체 링크 유스케이스 다이어그램 (Use Case Diagram) - 시스템의 사용자 또는 액터(Actor)와 시스템이 제공하는 기능(Use Case) 간의 상호작용을 보여준다. - 시스템의 내부 요소와 외부 요소를 결합하고, 사용자의 특정 요구 사항을 강조한다. - 시스템의 상황을 묘사하고, 시스템의 청사진으로 작동할 수 있다. - 사용자를 위한 다이어그램이므로 시스템의 기능이나 세부정보를 나타내지는 않는다. 유스케이스 (Use Case) - 새로 만들어야 할 시스템이나 소프트웨어 변경 사항에 대한 요구 사항을 찾아내는 방법 - 사용자 또는 시스템 외부에서 시스템이 수행할 수 있는 작업 또는 시나리오 - 각 유스케이스는 시스템이 사용자의 요구사항을 .. 2024. 2. 23.
C++ - 커맨드 패턴 (Command Pattern) C, C++ 전체 링크 Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 - 스마트 포인터 : unique_ptr 커맨드 패턴 (Command Pattern) - 행동 패턴 - 행동을 캡슐화하여 다른 객체로 전달하는 패턴 - 요청을 객체로 캡슐화하여 매개변수화된 메서드 호출, 메서드 실행 또는 연산을 지원한다. 구현 - CommandInterface : execute() 메서드와 그에 필요한 다른 메서드(undo 등)를 정의 - ConcreteCommand : Command 인터페이스를 구현하여 실제로 실행될 작업을 구현 - Invoker : 클라이언트로부터 커맨드 객체를 받아서 실행하는 클래스, 클라이언트와 커맨드를 분리하는 역할 - Receiver : .. 2024. 2. 23.
UML - 클래스 다이어그램 (Class Diagram) Architecture & Design Pattern 전체 링크 참고 - 클래스 다이어그램 그리기 클래스 다이어그램 (Class Diagram) - 시스템의 클래스와 클래스들 간의 관계를 보여준다. - 코드 수준의 모든 구성 요소들을 속성들과 오퍼레이션들과 함께 나열한다. - 제한된 타입 정보를 제공하며, 메서드를 어떻게 작성해야 할지를 나타내지는 않는다. - Use Case의 명사가 클래스가 되며, 동사들은 메서드가 될 수 있다. 구조 클래스 다이어그램은 다음과 같은 구조를 가지고 있다. (클래스 이름 / 속성 / 오퍼레이션) (참고 : 오퍼레이션은 realization이 아닌 선언 정도, 메서드는 특정 언어로 구현된 실제 코드를 의미) attribute 앞의 기호는 visibility를 나타낸다. +.. 2024. 2. 23.
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.
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.
반응형