Composite
What isโ
Composite ํจํด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑ๋ ๋ณตํฉ ๊ฐ์ฒด(Composite)์ ๋จ์ผ ๊ฐ์ฒด(Leaf)๋ฅผ ๋์ผํ ์ธํฐํ์ด์ค๋ก ๋ค๋ฃฐ ์ ์๋๋ก ํด์ฃผ๋ ๋์์ธ ํจํด์ ๋๋ค.
+----------------+
| Graphic | <-- ๊ณตํต ์ธํฐํ์ด์ค
+----------------+
/ \
/ \
/ \
+---------------+ +--------------------+
| Ellipse | | CompositeGraphic |
| (Leaf) | | (Composite) |
+---------------+ +--------------------+
/ | \
/ | \
/ | \
+----------+ +----------+ +----------+
| Graphic | | Graphic | | Graphic |
| (Leaf or | | (Leaf or | | (Leaf or |
| Composite)| | Composite)| | Composite)|
+----------+ +----------+ +----------+
์ฆ, ์ฌ์ฉ์๋ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋์ผํ ์ฐ์ฐ์ ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด ํจํด์ ์ ์ฒด-๋ถ๋ถ ๊ด๊ณ๋ฅผ ํํํ ๋ ์ ์ฉํ๋ฉฐ, ํธ๋ฆฌ ๊ตฌ์กฐ์ ๊ณ์ธต์ ๊ตฌ์ฑํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
How do Codeโ
์ฅ์ : ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ํฉ๋๋ค.
๋จ์ : ์ฌ์ฉํ์ง ์๋๋ผ๋ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
// ๊ณตํต ์ธํฐํ์ด์ค: Leaf์ Composite ๋ชจ๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
public interface Graphic {
void draw();
}
// Leaf ํด๋์ค: ๋ ์ด์ ๊ตฌ์ฑ์์๊ฐ ์๋ ๊ฐ๋ณ ๊ฐ์ฒด์
๋๋ค.
public class Ellipse implements Graphic {
private final String name;
public Ellipse(String name) {
this.name = name;
}
@Override
public void draw() {
System.out.println("Ellipse ๊ทธ๋ฆฌ๊ธฐ: " + name);
}
}
// Composite ํด๋์ค: ํ๋ ์ด์์ Graphic ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ณตํฉ ๊ฐ์ฒด์
๋๋ค.
public class CompositeGraphic implements Graphic {
private final List<Graphic> children = new ArrayList<>();
// ์์ ์ถ๊ฐ
public void add(Graphic graphic) {
children.add(graphic);
}
// ์์ ์ ๊ฑฐ
public void remove(Graphic graphic) {
children.remove(graphic);
}
@Override
public void draw() {
System.out.println("CompositeGraphic ๊ทธ๋ฆฌ๊ธฐ ์์");
for (Graphic graphic : children) {
graphic.draw();
}
System.out.println("CompositeGraphic ๊ทธ๋ฆฌ๊ธฐ ์ข
๋ฃ");
}
}
// ์ฌ์ฉ ์์
public class CompositePatternDemo {
public static void main(String[] args) {
// Leaf ๊ฐ์ฒด ์์ฑ
Ellipse ellipse1 = new Ellipse("Ellipse 1");
Ellipse ellipse2 = new Ellipse("Ellipse 2");
Ellipse ellipse3 = new Ellipse("Ellipse 3");
// Composite ๊ฐ์ฒด ์์ฑ ๋ฐ Leaf ๊ฐ์ฒด ์ถ๊ฐ
CompositeGraphic compositeGraphic = new CompositeGraphic();
compositeGraphic.add(ellipse1);
compositeGraphic.add(ellipse2);
// ๋ ๋ค๋ฅธ Composite ๊ฐ์ฒด ์์ฑ ๋ฐ Leaf, Composite ์ถ๊ฐ
CompositeGraphic complexGraphic = new CompositeGraphic();
complexGraphic.add(ellipse3);
complexGraphic.add(compositeGraphic);
// ์ ์ฒด ๊ตฌ์ฑ ์์์ ๋ํด draw() ํธ์ถ
complexGraphic.draw();
}
}
๋ชฉ์ : ์ ์ฒด-๋ถ๋ถ ๊ด๊ณ๋ฅผ ํํํ์ฌ, ๋จ์ผ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ํจ
์ฅ์ : ํด๋ผ์ด์ธํธ๊ฐ ๋ณตํฉ ๊ตฌ์กฐ์ ๋ด๋ถ ๊ตฌ์ฑ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋์ผํ ์ธํฐํ์ด์ค๋ก ์ฐ์ฐ ์ํ ๊ฐ๋ฅ
์ ์ฉ ์: ๊ทธ๋ํฝ, ํ์ผ ์์คํ , UI ์ปดํฌ๋ํธ ๋ฑ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํจ
Last updated