-
[Java] λμμΈ ν¨ν΄(Composite ν¨ν΄)μΉ΄ν κ³ λ¦¬ μμ 2021. 5. 18. 00:45λ°μν
- μ΄ κΈμ "μνν μ½λ©μ¬μ κ°μ²΄μ§ν₯ λμμΈν¨ν΄ Youtube μμ"μ λ³΄κ³ μ°Έκ³ νμ¬ μμ±νμμ΅λλ€.
Composite ν¨ν΄μ΄λ?
Composite ν¨ν΄μ 볡μ‘ν μ€κ³λ₯Ό ν λ μ£Όλ‘ μ¬μ©νλ ν¨ν΄μΌλ‘ μ»΄ν¨ν° νμΌ μμ€ν μ μκ°νμλ©΄ λ©λλ€.
μ»΄ν¨ν° νμΌ μμ€ν μμλ ν΄λ λ΄λΆμ νμΌλ λ€μ΄κ° μ μμ§λ§, ν΄λ μ체λ λ€μ΄κ° μ μμ΅λλ€. λν, νμΌκ³Ό ν΄λλ λ€λ₯Έ μ‘΄μ¬μ§λ§ κ°κ° ν¬κΈ°κ° μ‘΄μ¬νκ³ μ΄λ¦ λ°κΎΈκΈ°, μμ νκΈ° λ±κ³Ό κ°μ λͺ λ Ήμ΄λ 곡ν΅μ μΌλ‘ μ£Όμ΄μ§λλ€.
μ΄μ²λΌ Composite ν¨ν΄μ ν¬ν¨λλ κ°μ²΄μ ν¬ν¨νλ κ°μ²΄κ° λμΌνκ² λ€λ€μ§ λ μ¬μ©νλ ν¨ν΄μ λλ€.
Composite μ¬μ©
public interface FileSystem { int getSize(); void printInfo(); }
FileSystem μΈν°νμ΄μ€μμλ μ©λμ ꡬνλ ν¨μμΈ getSizeμ FileSystemμ ꡬνν ν΄λμ€μ μ 보λ₯Ό λ°ννλ printInfo λ©μλλ₯Ό ꡬννλλ‘ κ°μ νκ³ μμ΅λλ€.
public class File implements FileSystem{ private String name; private int size; public File(String name, int size) { this.name = name; this.size = size; } @Override public int getSize() { return size; } @Override public void printInfo() { System.out.println("File name : "+name + "size : "+size); } }
File ν΄λμ€λ FileSystem μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ‘ μμ±μλ₯Ό ν΅ν΄ νμΌμ μ΄λ¦κ³Ό ν¬κΈ°λ₯Ό λ°μ μ μμ΅λλ€.
public class Folder implements FileSystem{ private String name; private ArrayList<FileSystem> includes = new ArrayList<>(); public void add(FileSystem fileSystem){ includes.add(fileSystem); } @Override public int getSize() { int total = 0; for(FileSystem file : includes){ total+=file.getSize(); } return total; } @Override public void printInfo() { System.out.println("Folder name : "+name+" size : "+getSize()); } }
- Folder ν΄λμ€λ Fileκ³Ό λ§μ°¬κ°μ§λ‘ FileSystem μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ§λ§ λ©€λ²λ³μλ‘ FileSystemμ λ΄λ λ°°μ΄μ κ°μ§κ³ μμ΅λλ€. Folder λ΄λΆμ File ν΄λμ€κ° λ€μ΄κ° μ μκ³ Folder ν΄λμ€ μμ²΄κ° λ€μ΄κ° μ μμ΅λλ€.
- μ΄ ν΄λμ€μμ λ΄λΆμ ν¬ν¨λλ FileSystemμ λͺ¨λ μΆκ°νλ ν¨μμΈ add λ©μλκ° κ΅¬νλμ΄ μκ³ , λͺ¨λ μ©λμ ν©νμ¬ κ³μ°νλ getSize λ©μλκ° μ€λ²λΌμ΄λ© λμ΄ μμ΅λλ€. printInfoλ λ§μ°¬κ°μ§λ‘ μ€λ²λΌμ΄λ©νμ¬ Folderμ μ΄λ¦κ³Ό λ΄λΆμ λ€μ΄μλ FileSystemμ μ©λλ€μ ν©νμ¬ μΆλ ₯νλλ‘ κ΅¬νλμ΄ μμ΅λλ€.
κ²°κ³Ό
public class Main{ public static void main(String[] args) { Folder folder1 = new Folder("Folder 1"); folder1.add(new File("File 1-1",10)); folder1.add(new File("File 1_2",20)); folder1.printInfo(); Folder folder2 = new Folder("Folder 2"); folder2.add(new File("File 2",10)); folder2.add(folder1); folder2.printInfo(); Folder folder3 = new Folder("Folder 3"); folder3.add(folder2); folder3.printInfo(); /** * Folder 3 * | * Folder 2 * / \ * File2 Folder 1 * / \ * File1-1 File1-2 * * Folder name : Folder 1, size : 30 * Folder name : Folder 2, size : 40 * Folder name : Folder 3, size : 40 */ } }
FileSystem μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€ Fileκ³Ό Folder ν΄λμ€λ§μΌλ‘ λ€μκ³Ό κ°μ΄ 볡μ‘ν μ€κ³λ₯Ό ν λ μ©μ΄νκ² ν μ μλ ν¨ν΄μ΄ λ°λ‘ Composite ν¨ν΄μ λλ€.
λ°μν