[디자인 패턴] 데코레이터 패턴

데코레이터 패턴(Decorator Pattern) 객체에 새로운 기능을 추가하려면 클래스를 확장해야 합니다. 클래스를 확장하는 방법은 상속과 구성(복합 객체 구성) 두 가지입니다. 상속은 클래스 간 강력한 결합 관계를 만들어 객체의 확장성과 유연성을 방해합니다. 데코레이터 패턴은 런타임 상황에서 객체를 동적으로 확장합니다. 데코레이터 패턴 구조 데코레이터 패턴은 런타임 상황에서 객체에 새로운 책임을 동적으로 추가합니다. 런타임 상황에서 책임을 추가한다는 것은 책임이 향후 어떤 형태로 변경될지 모른다는 것입니다. 따라서 데코레이터 패턴은 책임(클래스)를 분산하여 설계하는 것이 핵심입니다. 데코레이터 패턴은 다음과 같은 구성 요소가 있습니다....

December 1, 2020 · 3 min · Pacientes

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

복합체 패턴(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

[C++] 스마트 포인터 기초 개념

C++ 스마트 포인터 C++11부터 스마트 포인터가 도입되면서 C에서 사용하던 포인터(*) 사용을 권하지 않습니다. 스마트 포인터는 원시 포인터(Raw Pointer)를 세부적인 기능으로 구분하고 기능에 제한을 둔 포인터입니다. 스마트 포인터의 종류는 다음과 같습니다. std::unique_ptr std::shared_ptr std::weak_ptr 스마트 포인터를 사용하기 위해 memory STL 헤더가 필요합니다. 스마트 포인터의 장점 중 하나는 동적으로 할당한 객체의 메모리 해제가 자동으로 이뤄집니다. 더이상 생성한 객체의 흐름을 따라가며 delete를 할 필요가 없습니다. 스마트 포인터 예제 스마트 포인터의 기능을 알아보기 위해 간단한 클래스를 작성합니다....

November 29, 2020 · 5 min · Pacientes