HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
객체 지향 프로그래밍
객체 지향 프로그래밍
/
디자인 패턴
디자인 패턴
/
Composite Pattern
Composite Pattern
Composite Pattern

Composite Pattern

💡
컨테이너와 내용물을 같게 다루기

Intent

Composite  is a structural design pattern that lets you compose objects into tree structures and then work with these structures as if they were individual objects.

Implementation

notion image
 
💡
핵심 - Composite과 Leaf 모두 Component의 구현체임 - Composite은 Leaf의 Collection을 가짐

Applicablity

  • Tree-like 구조가 필요할때
 

Come Examples

package oodesign.design.structural.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; } }
package oodesign.design.structural.composite; import java.util.ArrayList; import java.util.List; public class Directory extends Component{ List<Component> components = new ArrayList<>(); public Directory(String name) { super(name); } public boolean addComponent(Component component){ return components.add(component); } public boolean removeComponent(Component component){ return components.remove(component); } }
package oodesign.design.structural.composite; 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; } }
package oodesign.design.structural.composite; public class Main { public static void main(String[] args) { Directory root = new Directory("root"); Directory home = new Directory("home"); Directory ndy = new Directory("ndy"); Directory music = new Directory("music"); Directory picture = new Directory("picture"); Directory doc = new Directory("doc"); Directory user = new Directory("user"); File track1 = new File("track1"); File track2 = new File("track2"); File pic1 = new File("pic1"); File doc1 = new File("doc1"); File java = new File("java"); root.addComponent(home); home.addComponent(ndy); ndy.addComponent(music); music.addComponent(track1); music.addComponent(track2); ndy.addComponent(picture); picture.addComponent(pic1); ndy.addComponent(doc); doc.addComponent(doc1); root.addComponent(user); user.addComponent(java); bfs(root); } private static void bfs(Component component){ System.out.println(component.getName()); if(component instanceof Directory){ ((Directory)component).components.forEach(Main::bfs); } } }
root home ndy music track1 track2 picture pic1 doc doc1 user java Process finished with exit code 0