일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Gradle
- Spring Batch
- redis
- ReactJS
- jsp
- Spring
- laravel
- Oracle
- IntelliJ
- linux
- java
- Design Patterns
- php
- it
- Git
- 맛집
- MySQL
- db
- Web Server
- AWS
- ubuntu
- springboot
- Spring Boot
- 요리
- javascript
- jenkins
- tool
- JVM
- devops
- elasticsearch
Archives
- Today
- Total
아무거나
[Design Pattern] Composite Pattern 본문
반응형
컴포지트 패턴(Composite Pattern)
객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
Component: 설계(인터페이스)
Leaf: 상속받은 내용물
Composite: Leaf를 담는 Composite 즉, Component가 만들어야할 공통적인 것들을 가지고있다.
컴포지트 패턴은 일반적으로
파일시스템
에 자주 사용한다.
컴포지트 패턴 예시 - 1
[요구사항]
- 파일 시스템을 만들자.
Component를 만들자.
[Component.java]
package com.bkjeon.composite;
abstract public class Component {
private String name;
public Component(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
File 클래스를 만들자.(=Leaf)
[File.java]
public class File extends Component {
private Object data;
public File(String name) {
super(name);
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
기능을 수행할 수 있는 Folder 관련 클래스를 만들자.(=Composite)
[Folder.java]
package com.bkjeon.composite;
import java.util.ArrayList;
import java.util.List;
public class Folder extends Component {
List<Component> children = new ArrayList<>();
public Folder(String name) {
super(name);
}
public List<Component> getChildren() {
return children;
}
public boolean addComponent(Component component) {
return children.add(component);
}
public boolean removeComponent(Component component) {
return children.remove(component);
}
}
이제 메인클래스에서 사용해보자.
[Main.java]
package com.bkjeon.composite;
public class Main {
public static void main(String[] args) {
Folder
root = new Folder("root"),
home = new Folder("home"),
garam = new Folder("garam"),
music = new Folder("music"),
picture = new Folder("picture"),
doc = new Folder("doc"),
usr = new Folder("usr");
File
track1 = new File("track1"),
track2 = new File("track2"),
pic1 = new File("pic1"),
doc1 = new File("doc1"),
java = new File("java");
root.addComponent(home);
home.addComponent(garam);
garam.addComponent(music);
music.addComponent(track1);
music.addComponent(track2);
garam.addComponent(picture);
picture.addComponent(pic1);
garam.addComponent(doc);
doc.addComponent(doc1);
root.addComponent(usr);
usr.addComponent(java);
show(root);
}
// 출력
private static void show(Component component) {
System.out.println(component.getClass().getName() + " | " + component.getName());
if (component instanceof Folder) {
for (Component c: ((Folder) component).getChildren()) {
show(c);
}
}
}
}
실행결과를 확인하면 폴더 구조를 볼 수 있다.
com.bkjeon.composite.Folder | root
com.bkjeon.composite.Folder | home
com.bkjeon.composite.Folder | garam
com.bkjeon.composite.Folder | music
com.bkjeon.composite.File | track1
com.bkjeon.composite.File | track2
com.bkjeon.composite.Folder | picture
com.bkjeon.composite.File | pic1
com.bkjeon.composite.Folder | doc
com.bkjeon.composite.File | doc1
com.bkjeon.composite.Folder | usr
com.bkjeon.composite.File | java
참고
- https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EC%A7%80%ED%8A%B8_%ED%8C%A8%ED%84%B4
- https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
yyyy-MM-dd 형태의 날짜 조회 방법 (0) | 2019.12.26 |
---|---|
<![CDATA[ ]]> 사용 이유 (0) | 2019.12.24 |
[Design Pattern] Bridge Pattern (0) | 2019.12.12 |
[Design Pattern] Abstract Factory Pattern (0) | 2019.12.10 |
[Design Pattern] Builder Pattern (0) | 2019.12.08 |
Comments