-
객체 생성 : 팩토리 메서드 ( Factory Method )Programming/패턴 2020. 11. 9. 02:42
의도 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 함. 문제 물류 관리 어플리케이션을 만들었다고 생각하자. 현재 트럭으로만 움직이기 때문에 트럭 클래스를 생성해서, 코드의 대부분은 트럭 클래스 내에서 움직이고 있음. 하지만, 어플리케이션이 꽤나 유명해져서 해상 운송 회사에서 배로 운송하고 싶은 수단을 추가하여 만들어달라고 요청이 들어옴. 이럴 때 코드베이스 전체를 뒤집어야하는 현상이 있으며, 다른 수단이 또 추가될 때마다 교통 객체의 클래스마다 동작 조건을 바꾸어 주어야 하며 코드 또한 유지하기가 점점 힘들어진다. 결과 Product는 객체의 인터페이스를 정의함. ConcreteProductA, B는 Product 인터페이스에 정의된..
-
객체 생성 : 프로토타입 패턴 ( Prototype Pattern )Programming/패턴 2020. 9. 26. 16:57
정의 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성 왜 사용해야 할까? 객체가 이미 존재하고 그 객체의 복사본을 만들고 싶을 때 사용한다. 그러면 새로운 객체를 만들 때 모든 필드를 확인하고 해당 값을 새 객체에 할당하는 것은 좋은 생각이긴 하지만, 일부 필드가 private이고 객체 자체가 외부에서 보이지 않을 수 있는 이유로 모든 객체를 복사할 수 있는 것은 아니라고 한다 모든 객체에 대한 공통 인터페이스를 선언하고 이 인터페이스를 통해서 객체의 클래스에 연결하지 않고 객체를 복제한다. clone 함수를 구현함으로써 이전 객체의 모든 필드 값을 새 객체로 전달하는 역할을 한다. 실생활에서의 프로토타입은 다양한 테스트 및 빠른 결과물을 ..
-
UML 관계 종류Programming/패턴 2020. 9. 22. 13:55
UML에서 의존, 일반화, 실체화, 집합, 합성 관계를 구성하고 있다. 의존 관계 Class A (Car_A) 의 함수가 Class B (GPmp_B) 의 함수를 호출하거나 인자로 받는 등에 사용될 때, 집합 관계를 이룬다고 한다. public class Car_A { // ... public void Person_A(GPmp_B gp) { gp.charge(); } } public class GPmp_B { // ... public void charge() { // ... } } 연관 관계 클래스들이 연결되어 있고 한 클래스 ( Person_A ) 가 다른 클래스 ( Car_B ) 에서 제공하는 기능을 사용하는 상황일 때 표시. 의존 관계와 좀 비슷한 것 같지만, Person_A는 Car_B Car; ..
-
객체 생성 : 빌더 패턴 ( Builder Pattern )Programming/패턴 2020. 9. 22. 01:58
GOF의 디자인 패턴 중 빌더 패던에 관한 내용. 정의 복잡한 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 구조 Builder : 추상 인터페이스를 정의 ConcreteBuilder : 인터페이스들을 구현하며 각 부품을 모아서 결과로 정의하고 관리한다. Director : 인터페이스를 사용하는 객체를 합성. Product : 복합적인 객체를 표현함. 예제코드 ( 위키참고 ) #include // Product.. class Pizza { private: std::string dough; std::string sauce; std::string topping; public: Pizza(); ~Pizza(); void SetDough(const..
-
객체 생성 : 추상 팩토리 패턴 ( Abstract Factory Pattern )Programming/패턴 2020. 9. 4. 16:32
GOF의 디자인 패턴 중... 객체 생성의 추상 팩토리에 관한 내용 사용의도 구체적인 자식 클래스를 정의하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴. 동기 UI 버튼 모양, 동작 방식이 서로 다르기 떄문에 직접 정의하여 사용하지 않고 인터페이스를 정의한 후, 인터페이스를 상속받은 클래스를 정의하여 구체적인 구현을 제공한다. 활용성 객체가 생성되거나 구성, 표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할 때 - ( 이해가 잘 안됨.. ) 여러 제품군 중 하나를 선택해서 시스템을 설정해야 하고 한번 구성한 제품을 다른 것으로 대체할 수 있을 때 관련 제품 객체들이 함께 사용되도록 설계되었고 이 부분에 대한 제약이 외부에..
-
객체 생성 : 싱글턴 패턴 ( Singleton Pattern )Programming/패턴 2020. 5. 4. 22:59
GOF 디자인 패턴을 참고합니다. 객체를 생성하는 방법들 중에 하나인 싱글턴 패턴. 정의 - 오직 한 개의 클래스 인스턴스만 갖도록 보장하며, 전역적인 접근점을 제공한다고 한다. 사용 이유 - 어떠한 클래스는 하나의 인스턴스만을 갖도록 하는 것이 좋은 것이 있다. - 예를 들어, 많은 프린트가 있다해도 스풀은 하나여만 하고, 윈도우 관리자도 오직 하나, 한 회사에서 하나의 회계 시스템만 운영. 활용성 - 유일한 객체가 부모 클래스에서 자식 클래스로 확장되어야 하고, 코드 수정없이 자식 클래스의 인스턴스를 사용할 수 있어야 할 때 사용. 구조 코드 // .h class Singleton { public: static Singleton* Instance(); // 다른 인터페이스는 이곳에 작성을 합니다. v..
-
객체 행동 : 전략 패턴 ( Strategy Pattern ) - 정책(Policy)Programming/패턴 2020. 5. 4. 18:05
GOF의 디자인 패턴을 참고하여 작성을 합니다. 객체 행동에 대한 패턴 중 하나 정의 - 각 알고리즘을 캡슐화하여, 이들을 상호교환이 가능하도록 만드는 패턴 중 하나이다. - 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있다. 동기 - 특정 알고리즘에 대한 함수 및 기능은 다양하지만, 클래스에서 직접 하드코딩하는 것은 아래과 같은 이유로 별로다. - 코드 크기에 대한 문제 - 모든 알고리즘을 제공하기가 힘듦 - 다양화하기가 힘듦 구조 - Composition 클래스는 특정 기능에 대한 유지 및 수정에 대한 책임이 있다고 하면, Composition 클래스 자체에서 구현하지 않음. - Composition 객체는 Compositor 객체에 대한 참조자를 유지하고 관리한..