일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Heap
- IT
- JPA
- 백준
- Spring
- 컴퓨터구조
- C
- MSA
- Java
- Galera Cluster
- 운영체제
- react
- 자료구조
- design pattern
- Proxy
- 네트워크
- spring webflux
- redis
- 디자인 패턴
- 파이썬
- 자바
- Algorithm
- mongoDB
- c언어
- JavaScript
- OS
- MySQL
- Kafka
- 알고리즘
- Data Structure
- Today
- Total
목록design pattern (10)
시냅스

Composite Pattern 부분과 전체에 대한 복합 객체의 트리구조를 나타낼 수 있음 클라이언트가 개별 객체와 복합 객체를 동일하게 다룰 수 있는 인터페이스를 제공 재귀적인 구조 기본 객체는 복합 객체에 포함이 되고, 복합 객체 역시 또 다른 복합 객체에 포함될 수 있다. 클라이언트 코드는 기본객체와 복합객체에 대한 일관된 프로그래밍을 할 수 있다. 기본 객체가 증가하여도 전체 객체의 코드에 영향을 주지 않는다. 새로운 요소의 추가가 편리하고 범용성 있는 설계가 가능하다. Component 전체와 부분 객체에서 공통적으로 사용할 인터페이스 선언 전체와 부분 객체에서 공통으로 사용할 기능 구현 전체 클래스가 부분요소들을 관리하기 위해 필요한 인터페이스 선언 Leaf 집합 관계에서 다른 객체를 포함할 ..

Command Pattern 요청을 객체로 만들어 전달한다. 요청을 기록으로 남겨 취소도 가능하도록 한다. 클라이언트 서버간의 프로토콜로 사용할 수 있다. 명령 자체를 객체화 하여 여러 다른 객체에 명령이 전달되거나 명령이 조합될 수도 있다. 새로운 프로토콜이 추가되기 쉽다. 부가적인 정보가 많은 경우 비효율적일 수 있다. Command 각 명령이 수행할 메서드 선언 ConcreteCommand 실제 명령이 호출되도록 execute 구현 Client ConcreteCommand 객체를 생성하고 처리 객체로 정의 Invoker Command 처리를 수행할 것을 요청 Receiver Command를 처리함 구현 package command; import java.util.ArrayList; import ja..

Mediator Pattern 객체간의 상호 작용을 하나의 객체에서 캡슐화하여 처리 UI 프로그래밍에서 많이 사용되는 방법으로 Widget 간의 상호 처리를 서로간에 처리하는 것이 아닌 한 객체가 전담하여 처리하도록 하는 방식 객체 서로간의 메세지를 전달할 일이 있을 때도 중재자를 두고 전달할 수 있음 N:N 의 관계를 1:N의 관계로 바꿀 수 있음 객체 지향 방법론에서는 객체의 관련된 처리는 객체 내부에서 하는 것이 맞지만, 그렇게 하면 상호작용의 급증이 발생하고 시스템의 변경이 어려움 Mediator 객체가 상호작용을 제어하고 조율하게 함, 각 객체는 다른 객체의 참조자는 알 필요 없이 Mediator만 알면 됨 Mediator Colleague 객체와 교류하는데 필요한 인터페이스를 정의 Concre..

Bridge Pattern 기능의 계층과 구현의 계층을 분리함 추상화와 구현을 분리하여 각각을 독립적으로 변경할 수 있게 함 기능의 확장과 구현의 확장을 따로 계층화 함 기능에 대한 여러가지 구현을 다양하게 적용할 수 있음 기능과 구현이 혼자하면 상속의 관계가 복잡해짐 두 계층을 분리하고 서로의 사이에 다리(Bridge)가 필요함 Abstraction (List) 추상화 개념의 상위 클래스이고 객체 구현자 (Implementor)에 대한 참조자를 관리 RefinedAbstraction (Stack, Queue) 추상화 개념의 확장된 기능을 정의 Implementor (AbstractList) 구현 클래스에 대한 선언을 제공 하위 클래스가 구현해야 하는 기능들을 선언한다. Implementor와 Abstr..

Abstract Factory Pattern 여러 제품굼을 하나의 Set으로 생성하는 패턴 구체적인 클래스를 생성하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공한다. 추상화된 인터페이스 팩토리를 제공하고 상황에 따라 그에 맞는 인스턴스들이 생성되도록 한다. 생성되고 구성되고 표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할 때 하나 이상의 제품군들 중 하나를 선택하여 시스템을 설정해야 하고 한 번 구성한 제품을 다른 것으로 대체할 수 있을 때 AbstractFactory 개념적 제품에 대한 객체를 생성하는 오퍼레이션 인터페이스를 정의한다. ConcreteFactory 구체적인 제품에 대한 객체를 생성하는 오퍼레이션을 구현한다. AbstractProduc..

반복자 패턴 Iterator Pattern 객체 요소들의 내부 표현방식을 공개하지 않고, 객체에서 되지 않은, 외부에서 객체에 순회하는 객체를 만든다. 내부에서 객체의 순차적인 제공을 하지 않음 순회 구현 방식이 다르더라도 동일한 방식(메서드)로 순회 할 수 있게 제공 여러 리스트 객체에 대한 동일한 방식으로 순회하는 방법을 제공하기 위해 순회하는 객체를 따로만듬 e.g. Java Collection Framework의 Iterator Iterator 요소에 접근하고 순회하는데 필요한 메서드 제공 ConcreteIterator Iterator에 정의된 인터페이스를 구현하는 클래스 Aggregate Iterator 객체를 생성하는 인터페이스 정의 순회할 요소를 가지고 있다. ConcreteAggregate..

옵저버 패턴 Observer Pattern 객체 사이에 일대다의 의존 관계가 있고, 어떤 객체의 상태변하게 되면 그 객체에 의존성을 가진 다른 객체들이 변화의 통지(notify or update)를 받고 자동으로 갱신될 수 있게 함 dependent, publish-subscribe 하나의 객체에 연동되는 여러 객체 집합이 있을 때 변화에 대한 일관성은 유지하고, 객체간의 결합도는 낮게하기 위한 패턴 느슨한 결합 Loose coupling : 느슨하게 결합되어 있다는 것은 상호작용을 하지만 서로 잘 모른다는 것 변화에 관심이 있는 객체에 대한 가정없이 통보될 수 있도록 해야 함 주로 data - view 의 관계에서 사용됨 log와 handler들의 관계. (file, console, 등등) Subjec..

스테이트 패턴 State Pattern 클래스가 하나의 상태에 따라 그 내부의 여러 메서드의 기능이 바뀐다고 하면 이를 각각의 클래스로 분리한다. 의도와 동기 객체의 기능은 상태에 따라 달라질 수 있는데, 이러한 상태가 여러가지이고, 클래스 전반의 모든 기능이 상태에 의존적이라 하면, 상태를 클래스로 표현하는 것이 적절함 클래스로 분리하지 않게 되면 상태가 여러가지인 경우 많은 if-else 문이 사용되고 추후 상태가 추가되거나 삭제될 때 수정해야 하는 사항이 너무 많아짐 Context : ConcreteState의 인스턴스를 관리하고 서로 상태가 바뀌는 순간을 구현할 수 있다. State : Context 가 사용할 메서드를 선언한다. ConcreateState : 각 상태 클래스가 수행할 State에..
팩토리 메소드 패턴 Factory method Pattern 인스턴스 작성을 하위 클래스에게 위임. Template Method 패턴을 인스턴스 생성에 적용 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 결정하게 함. 여러 상황에 따라 각각 생성될 수 있는 객체에 대한 생성을 하위 클래스에 위임 생성과 관련된 동일한 메서드는 상위 클래스에서 처리 객체를 만들어 반환하는 함수를 (생성자 대신) 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법. package factory; abstract class Car { String productName; public String toString() { return produ..
싱글톤 패턴 singleton pattern 이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스터스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다. public static SingletonService getInstance() ..