Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 멀티스레드
- spring cloud
- thread
- zipkin
- 배치
- TypeScript
- MSA
- 사가 패턴
- 디자인 패턴
- 타입스크립트
- 키클락
- JPA
- 생산자 소비자 패턴
- 알고리즘
- Action Pattern
- Java
- 체인 패턴
- Spring Boot Actuator
- Transaction Pattern
- 디자인패턴
- Serial GC
- spring batch
- Parallel Old GC
- Resilinece4j
- 스레드
- The law of Demeter
- 스프링 배치
- Spring Cloud Netfilx Eureka
- java 정렬
- saga pattern
Archives
- Today
- Total
PSD( Private-Self-Development )
복합체 패턴 본문
복합체 패턴?
객체를 트리 구조로 구성 하고, 이를 재귀적으로 순회하며 작업 하기 위한 패턴입니다.
4가지 구성 요소
- Component : Composite 과 Leaf 에 공통적으로 적용되는 인터페이스 입니다. (투명성 제공을 위함)
- Composite(복합 객체) : 자식을 가지는 요소입니다. (ex. 폴더)
- Leaf(일반 객체) : 자식을 가지지 않는 요소입니다. (ex. 파일)
- Client : 복합체를 사용하는 곳 Composite 이든 Leaf 든 동일한 방식으로 사용 가능 하다.
투명성?
두 가지 서로 다른 구성 요소를 동일한 형태로 투명하게 사용하기 위해 일반화 작업을 실행한다. (주로, 동일한 추상 클래스나 인터페이스 를 상속 받는다.)
이러한 투명성은 사용자에게 동일한 방법으로 객체에 접근할 수 있도록 합니다.
복합체 패턴의 장점
- 사용자가 트리 구조의 복잡한 세부 사항을 몰라도 사용 가능하다.
- 개방/패쇄 원칙
복합체 패턴의 단점
- Component 구성 요소는 투명성 제공을 위해 단일 책임 원칙을 위반한다.(Leaf 관련 기능, Composite 관련 기능 이 같이 존재)
- 기능이 너무 다른 클래스들은 적용이 제한적.
- 혹은 인터페이스를 과도하게 일반화 하여 이해하기 어려울 수 있다.
복합체 패턴의 구현
// Component
public abstract class FileRoot {
public abstract String getData();
}
// Composite(복합 객체)
public class Directory extends FileRoot{
private final List<FileRoot> files = new ArrayList<FileRoot>();
public List<FileRoot> add(FileRoot file){
files.add(file);
return files;
}
public List<FileRoot> remove(FileRoot file){
files.remove(file);
return files;
}
public List<FileRoot> getFile(){
return files;
}
@Override
public String getData() {
StringBuilder sb = new StringBuilder();
for( FileRoot file : files ){
sb.append(file.getData());
}
return sb.toString();
}
}
// Leaf(일반 객체)
@Getter
@Setter
public class File extends FileRoot{
private String data;
@Override
public String getData() {
return data;
}
}
언제 사용해야 할까?
- 객체들을 트리 구조로 묶을 수 있을 때
- 일반 객체 와 이를 포함하는 복합 객체를 모두 균일하게 처리하고 싶을 때
참조