[디자인 패턴] 복합체 패턴

복합체 패턴(Composite Pattern) 복합체 패턴은 객체 간의 계층적 구조화를 통해 객체를 확장하는 패턴입니다. 계층적 구조는 재귀(Recursive)와 트리(Tree) 구조를 생각하면 좋습니다. 일반적인 복합 객체로부터 복합체 패턴으로 확장해보겠습니다. 복합 객체 복합 객체는 한 객체가 다른 객체를 포함하고 있는 관계를 의미합니다. 대표적인 복합 객체로 컴퓨터가 있습니다. 컴퓨터는 다양한 객체(모니터, 메모리, 저장장치 등)를 포함하고 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Computer { public: void setMonitor(std::shared_ptr<Monitor> monitor) { m_monitor = monitor; } void setDisk(std::shared_ptr<Disk> disk) { m_disk = disk; } void setMemory(std::shared_ptr<Memory> memory) { m_memory = memory; } std::shared_ptr<Monitor> m_monitor; std::shared_ptr<Disk> m_disk; std::shared_ptr<Memory> m_memory; std::string m_name = "Computer Composite"; }; Computer는 Monitor, Disk, Memory를 포함하고 있는 복합 객체입니다....

November 30, 2020 · 4 min · Pacientes

[디자인 패턴] 브릿지 패턴

브릿지 패턴(Bridge Pattern) 브릿지 패턴은 객체의 확장성을 향상하기 위한 패턴입니다. 객체의 동작을 처리하는 구현부와 확장을 위한 추상부를 분리합니다. 브릿지 패턴은 유지보수를 간결하게 하기 위한 유용한 패턴입니다. 실제 개발 상황에서 자주 발생하는 불행한 일을 조금이나마 방지하고, 해결할 수 있습니다. 일반적인 문제 상황 매우 간단한 상황을 상상해보겠습니다. 고객의 첫 요구사항에 의해 인사를 건네는 클래스를 작성하였습니다. 1 2 3 4 5 6 7 8 class Hello { public: std::string greeting() { return "Hello"; } }; 작성한 클래스를 다음과 같이 잘 사용하고 있었습니다....

November 29, 2020 · 4 min · Pacientes

[디자인 패턴] 어댑터 패턴

어댑터 패턴(Adapter Pattern) 어댑터 패턴은 코드를 재사용하기 위한 인터페이스를 처리하는 패턴입니다. 또 다른 말로는 래퍼 패턴(Wrapper Pattern)이라고 합니다. 기존의 코드가 새로 변경된 인터페이스와 일치하지 않는 경우가 발생할 수 있는데, 어댑터 패턴은 기존의 코드를 래핑하고 변경된 인터페이스에 맞게 재설계합니다. 어댑터 패턴의 주요 용어 어댑터: 변환을 처리하는 객체 어댑티: 변환을 받아 사용하는 객체 어댑터 패턴의 종류 어댑터 패턴은 두 가지로 구분합니다. 클래스 어댑터: 상속을 사용하여 객체 확장 클래스 어댑터를 구현하기 위해 다중 상속을 활용 최신 언어에서는 다중 상속을 지원하지 않는 경우가 많다....

November 29, 2020 · 2 min · Pacientes

[디자인 패턴] 프로토타입 패턴

프로토타입 패턴(Prototype Pattern) 객체를 생성하는 방법은 new 키워드를 사용한 방법이 일반적입니다. C++의 스마트 포인터도 내부적으로 new 키워드를 사용합니다. 객체를 생성하는 또 한가지 방법은 객체를 복사(Copy)하는 방법입니다. 프로토타입 패턴은 객체를 복사하는 방법을 사용하여 객체를 생성합니다. 프로토타입 패턴의 구조 프로토타입 패턴은 신규 객체를 생성하지 않고, 기존에 만들어진 객체를 복제합니다. C++에서 객체를 복사하는 방법은 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)가 있습니다. 프로토타입 패턴은 특별한 구조를 갖는 것이 아니라, 복사를 활용합니다. 프로토타입 패턴을 위한 예제 사용자가 지정한 메세지를 객체가 저장하고 있다가 필요할때 반환하는 클래스를 작성합니다....

November 29, 2020 · 3 min · Pacientes

[디자인 패턴] 빌더 패턴

빌더 패턴(Builder Pattern) 클래스의 인스턴스인 객체는 단일 객체와 복합 객체로 구분합니다. 단일 객체는 하나의 클래스로 생성된 객체를 의미합니다. 팩토리, 팩토리 메서드, 추상 팩토리 모두 단일 객체를 생성하는 패턴입니다. 복합 객체는 하나의 객체가 다른 객체를 포함하는 관계(has-a)를 의미합니다. 클래스를 확장하는 방법에는 상속하는 관계(is-a)도 있습니다. 하지만 상속은 강력한 상-하 결합 관계와 불필요한 정보도 포함되는 단점이 있습니다. 현대적인 객체지향 개발 방법은 상속을 최소화하고 복합 객체로 구성합니다. (참고) 인터페이스 클래스를 상속하여 구현하는 것은 상-하 상속 관계가 아닌 선언과 구현으로 구분합니다....

November 28, 2020 · 5 min · Pacientes