구조 패턴 5

Flyweight 패턴

Flyweight 패턴은 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 패턴입니다. 구조 Flyweight 공유에 사용할 클래스들의 인터페이스를 선언합니다. ConcreteFlyweight Flyweight의 내용을 정의하며, 실제로 공유될 객체입니다. FlyweightFactory 해당 클래스를 통해서 Flyweight의 인스턴스를 생성 또는 공유합니다. Client FlyweightFactory로 생성한 인스턴스를 사용합니다. 활용 상황 어플리케이션에 의해 생성되는 객체의 수가 많을때 유용합니다. 생성된 객체가 오래도록 메모리에 상주하며, 사용되는 횟수가 많을때 유용합니다. 생성될 객체의 외적 특성이 클라이언트 프로그램으로부터 정의되어야..

Facade 패턴

Facade 패턴은 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. Facade 클래스에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다. 구조 Facade Facade 클래스는 Subsystem 클래스들을 혼합하여 Client가 요청할 수 있는 간단한 메서드를 제공합니다. Client Subsystem 클래스 내의 리소스에 접근하기 위해 Facade 클래스를 사용하는 객체입니다. Subsystem 소프트웨어 라이브러리/API의 집합입니다. Facade 클래스를 통해 접근됩니다. 활용 상황 복잡한 Subsystem에 대해 간단한 인터페이스를 제공하고자 할때 유용합니다. Client와 구현 클래스 사이에 또는 Subsystem과 다른 Subsyste..

Bridge 패턴

Bridge 패턴은 구현으로부터 추상 레이어를 분리하여 이 둘이 서로 독립적으로 변화할 수 있도록 해주는 패턴입니다. 구조 Abstraction 기능 계층의 최상위 클래스이며 추상 인터페이스를 정의합니다. 구현 부분에 해당하는 클래스의 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출합니다. RefinedAbstraction Abstraction 클래스에 의해 정의된 인터페이스를 확장합니다. 기능 계층에서 새로운 부분을 확장한 클래스입니다. Implementor 구현 클래스를 위한 인터페이스를 정의합니다. Abstraction 클래스의 기능을 구현하기 위한 인터페이스를 정의합니다. ConcreteImplementor Implementor의 인터페이스에 대한 실제 기능 부분을 구현합니다. ..

Adapter 패턴

Adapter 패턴은 서로 다른 인터페이스를 가진 두 클래스를 Adapter 클래스로 인터페이스를 통일시켜 사용할 수 있게 해주는 패턴입니다. 구조 Client 써드파티 라이브러리나 외부 시스템을 사용하는 곳입니다. Target Adapter가 구현하는 인터페이스입니다. Client는 Target 인터페이스를 통해 Adaptee인 써드파티 라이브러리를 사용하게 됩니다. Adapter Client와 Adaptee 중간에서 호환성이 없는 둘을 연결시켜주는 역할을 담당합니다. Target 인터페이스를 구현하며, Client는 Target 인터페이스를 통해 Adapter에 요청을 보냅니다. Adapter는 Client의 요청을 Adaptee가 이해할 수 있는 방법으로 전달하고, 처리는 Adaptee에서 이루어집..

Decorator 패턴

Decorator 패턴은 기본 객체에 추가적인 기능을 동적으로 유연하게 첨가하는 패턴입니다. 구조 Component ConcreteComponent와 Decorator가 구현할 인터페이스입니다. 두 객체를 동등하게 다루기 위해 존재합니다. ConcreteComponent Decorate를 받을 객체입니다. 즉, 기능 추가를 받을 기본 객체를 의미합니다. Decorator Decorate를 할 객체의 추상 클래스입니다. 즉, 기능 추가를 할 객체는 이 객체를 상속받습니다. ConcreteDecorator Decorator를 상속받아 구현할 다양한 기능 객체입니다. 이 기능들은 ConcreteComponent에 추가되기 위해 만들어 집니다. 활용 상황 객체가 상황에 따라 다양한 기능이 추가되거나 삭제되어야 ..