전체 글 121

State 패턴

State 패턴은 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고 각 상태를 객체화하여 각 상태에게 행위를 위임하는 패턴입니다. 구조 State 시스템의 모든 상태에 공통 인터페이스를 제공합니다. 따라서 이 인터페이스를 실체화한 어떤 상태 클래스도 기존 상태 클래스를 대신해 교체해서 사용이 가능합니다. State1, State2, State3 Context 객체가 요청한 작업을 자신의 방식으로 정의하여 실제로 수행하는 클래스입니다. Context State를 이용하는 역할을 수행합니다. 현재 시스템의 상태를 나타내는 상태 변수와 실제 시스템의 상태를 구성하는 여러가지 변수가 있습니다. 또한 각 상태 클래스에서 상태 변경을 요청해 상태를 바..

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의 인터페이스에 대한 실제 기능 부분을 구현합니다. ..

Prototype 패턴

Prototype 패턴의 Prototype은 원형이라는 의미로, 원형이 되는 인스턴스로 새로운 인스턴스를 만드는 방식입니다. 즉, 객체에 의해 생성될 객체의 타입을 결정하는 패턴입니다. 구조 Prototype 새로운 인스턴스를 만들기 위한 메서드를 결정하는 인터페이스입니다. ConcretePrototype 인스턴스를 복사하여 새로운 인스턴스를 만드는 메서드를 실제로 구현합니다. Client 인스턴스 복사 메서드를 사용해서 새로운 인스턴스를 생성합니다. 활용 상황 런타임에 새로운 클래스를 추가하고 삭제할때 유용합니다. 동적으로 클래스에 따라 응용프로그램을 설정해야 할때 유용합니다. Prototype 패턴의 장단점 장점 객체를 생성해주기 위한 별도의 객체 생성 클래스가 필요하지 않습니다. 객체의 각 부분을 ..

Singleton 패턴

Singleton 패턴은 단 하나의 인스턴스만을 생성하여 사용할 수 있게 해주는 패턴입니다. 활용 상황 공통된 객체를 여러개 생성하여 사용해야 할때 유용합니다. 전역에서 사용될 하나의 객체를 만들어야 할때 유용합니다. Singleton 패턴의 장단점 장점 하나의 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있습니다. 하나의 전역 인스턴스를 사용하기 때문에 다른 클래스에서 데이터를 공유할 수 있습니다. 단점 Singleton 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, SOLID 원칙 중 SRP, OCP 원칙에 위배됩니다. 수정과 테스트가 어려워집니다. 꼭 필요한 경우가 아니면 지양해야 합니다.

Abstract Factory 패턴

Abstract Factory 패턴은 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴입니다. 구조 AbstractFactory 실제 팩토리 클래스의 공통 인터페이스입니다. ConcreteFactory 구체적인 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성합니다. AbstractProduct 제품의 공통 인터페이스입니다. ConcreteProduct 구체적인 팩토리 클래스에서 생성되는 구체적인 제품입니다. 활용 상황 Factory 패턴을 쓰던 상황에서, 팩토리의 종류를 늘려야 할때 유용합니다. 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성해야 할때 유용합니다. Abstract Fa..

Factory 패턴

Factory 패턴은 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 내리는 패턴입니다. 다시 말해 여러 개의 서브 클래스를 가진 슈퍼 클래스가 있을때 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식입니다. 이렇게 Factory 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미루고 인스턴스화에 대한 책임을 객체를 사용하는 클라이언트에서 Factory 클래스로 가져옵니다. 활용 상황 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을때 유용합니다. 생성할 객체를 기술하는 책임을 자신의 서브 클래스가 지정했으면 할때 유용합니다. Factory 패턴의 장단점 장점 객체를 생성하는 코드를 분리하여 클라이언트 코드와 결합도(..

Builder 패턴

Builder 패턴은 생성 인자가 많은 복잡한 인스턴스를 생성하는 방법과 표현하는 방법을 정의하는 Builder 클래스를 따로 분리하여, Builder 객체를 통해 구체적인 객체를 생성하는 패턴입니다. 구조 Builder Prouduct 객체의 요소들을 생성하기 위한 추상 인터페이스를 정의합니다. ConcreteBuilder Builder에서 정의해둔 인터페이스를 구현하고 각 Product의 요소들을 정의, 구축하고 관리하며 복합 인스턴스(Product)가 어떻게 구성되는지에 관한 절차를 정의합니다. Director Builder 인터페이스를 사용하는 객체를 합성(생성)합니다. Product Builder 패턴을 사용하여 생성된 인스턴스입니다. 활용 상황 복합 인스턴스의 생성 알고리즘이 복합 인스턴스의 ..

Adapter 패턴

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