목록OOP 디자인 패턴 (8)
복합체 패턴 (Composite) 복합체 패턴은 객체들을 트리 구조들로 구성한 후, 이러한 구조들과 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴입니다. 복합체 패턴은 앱의 핵심 모델이 트리로 표현될 수 있을 때만 사용하세요. 복합체 구성요소 Component 추상클래스 : 트리의 단순 요소들과 복잡한 요소들 모두에 공통적인 작업을 설명합니다. Leaf 클래스 : 잎은 트리의 기본 요소이며 하위요소가 없습니다. Composite 클래스 : 컨테이너(일명 복합체)는 하위 요소들(잎 또는 기타 컨테이너)이 있는 요소입니다. 컨테이너는 자녀들의 구상 클래스들을 알지 못하며, 컴포넌트 인터페이스를 통해서만 모든 하위 요소들과 함께 작동합니다. 요청을 전달받으면 컨테이너는 작업을 하위 요소들에 위임하고 중간 ..
브리지 패턴 (Bridge) 브리지는 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴입니다. 브리지 구성요소 리모컨 클래스 : 추상화를 담당하며, 기기를 참조해서 기기가 여러가지 동작을 수행하도록한다. tv의 볼륨을 올리거나, 채널을 변경하거나 기능이 추가된 리모컨 클래스 : 리모컨 클래스에는 없는 또다른 기능이 추가된 advanced된 리모컨입니다. 기기 인터페이스 : 리모컨클래스에서 사용하는 메서드들을 미리 선언해 둡니다. 기기 인터페이스를 구현하는 여러가지 기기들 : 기기 인터페이스에서 선언한 메서드들에 대한 구현과 추가적인 메서드들을 포함할 수 있습니다. 요약 브리지 패턴은 추상화와 구현..
어댑터 패턴 (Adapter) 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴입니다. 어댑터는 한 객체의 인터페이스를 다른 객체가 이해할 수 있도록 변환하는 특별한 객체입니다. 어댑터 구성요소 Target class (JsonFormat class) : 기본 비즈니스 로직의 인터페이스와 호환되는 형식을 정의합니다. (JSON 분석 프로그램이라고 가정합니다) → JSON 형식의 데이터와만 통신 가능 Adaptee class : XML 형식의 데이터로써, 우리의 비즈니스 로직에 넣어서 처리할 수 없는 데이터 형식 Adapter class : Adaptee 객체를 받아서 적절한 처리 후, 우리의 비즈니스 로직이 처리할 수 있도록 JSON 형식으로 변환해주는 클래스 ..
싱글턴 패턴 (Singleton) 싱글턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다. 싱글턴 패턴은 다음의 두가지 상황을 구현합니다. 클래스의 인스턴스가 하나만 있게 합니다 ⇒ 객체는 최초 1회 생성되고, 다른 객체의 생성을 시도했을 때 똑같은 객체를 돌려받게 됩니다. 물론 new 키워드를 이용하여 객체를 생성하면 무조건 새 객체를 돌려받게 되므로 일반적인 생성방법으로는 구현할 수 없습니다. 해당 인스턴스에 대한 전역접근 지점 제공 ⇒ 이는 마치 전역변수와 같은 기능을 하는데, 덮어씌워질 위험이 있는 전역변수와 다르게 이러한 상황에 대한 보호를 제공합니다. 위의 상황중 한가지만 해결해도 싱글턴 패턴이라 부를 수 있습니다. 대표..
프로토타입 패턴 (Prototype) clone 이라는 이름으로도 불립니다. 프로토타입은 코드를 그들의 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 하는 생성 디자인 패턴입니다. 복제를 지원하는 객체를 프로토 타입 이라고 합니다. 당신의 객체들에 수십 개의 필드와 수백 개의 가능한 설정들이 있는 경우 이를 복제하는 것이 서브클래싱의 대안이 될 수 있습니다. 프로토타입 패턴은 실제로 복제되는 객체들에 복제 프로세스를 위임합니다. 프로토타입은 객체들(복잡한 객체 포함)을 그의 특정 클래스들에 결합하지 않고 복제할 수 있도록 하는 생성 디자인 패턴입니다. 프로토타입 구성요소 Prototype 클래스 : 복제를 당할 객체를 정의합니다. 대부분 단일 clone 메서드로 이루어져 있습니다. Compo..
빌더 패턴 (Builder) 빌더는 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. 이 패턴을 사용하면 같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있습니다. 빌더 패턴을 사용하는 것은 제품에 매우 복잡하고 광범위한 설정이 필요한 경우에만 의미가 있습니다. 점층적 생성자의 제거 class Pizza { Pizza(int size) { ... } Pizza(int size, boolean cheese) { ... } Pizza(int size, boolean cheese, boolean pepperoni) { ... } // … 위의 코드는 여러개의 생성자를 오버로딩하여 객체 생성시, 입맛에 맞는 피자를 만드는 코드입니다. 이렇게 생성자를 오버로딩하면 생성자..
추상 팩토리 패턴 (Abstract Factory) 추상 팩토리는 관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴입니다다. 추상 팩토리 구성요소 추상 공장 인터페이스 : 공장에서 생산할 수 있는 제품들을 정의합니다. 추상 제품 인터페이스 : 제품들이 가져야할 메서드를 정의합니다. 구체적인 공장 클래스 : Korean 제품을 생산하는 공장, USA 제품을 생산하는 공장등 각 제품들의 하나의 variant(변형)을 생산하는 공장클래스 입니다. 구체적인 제품 클래스 : 제품 인터페이스를 상속받아서 메서드를 구현합니다. 의자면 sitOn(앉을 수 있다) 등. 클라이언트 코드 : 구체적인 공장을 하나 인수로 받아 제품들을 생성하고, 비즈니스 로직을 수행합니다. ..
팩토리 메서드 패턴 가상 생성자, Factory Method 라고도 불립니다. 팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴입니다. 팩토리 메서드 구성요소 제품 인터페이스 : 제품 Interface는 그 제품이 수행하는 고유한 operation을 갖고 있습니다. 제품 생성자 : 팩토리메서드를 추상클래스로 정의하고, someOperation 메서드를 갖고, 내부에서 제품을 만들고 제품과 상호작용 합니다. 특정 제품 : 제품 Interface를 상속받아서 operation 메서드를구현합니다. 즉정 제품 생성자 : 특정제품 생성자는 특정 제품에 대한 팩토리 메서드를 구현합니다. 특정제품 생성자 1이면,..