{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# OOP에서 트리를 구성하기 위한 기법 (Composite Pattern)\n", "\n", "HW4의 Level 3와 관련된 개념인 Composite Pattern 이라는 것에 대해서 알아봅시다\n", "\n", "OOP에서 트리 구조를 작성하기 위한 기법\n", "\n", "파일 폴더 .... 한번 Java로 작성해 봅시다\n", "\n", "실제 파일 시스템을 읽어들이는 프로그램을 만드는 게 아니라 그냥 개념만 따라서" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "abstract class Node { // 추상 클래스\n", " String name; // 파일 또는 폴더의 이름\n", " Node(String name) { this.name = name; }\n", " abstract void display();\n", "}" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "class Dir extends Node { // 디렉토리 노드\n", " Node nodes[];\n", " Dir(String name, Node nodes[]) { super(name); this.nodes = nodes; }\n", " @Override\n", " void display() {\n", " System.out.print(name); // 디렉토리 이름으로 시작\n", " System.out.print(\"{ \");\n", " for (Node n : nodes) {\n", " n.display(); // 포함하는 각각의 노드를 display\n", " System.out.print(\"; \");\n", " }\n", " System.out.print(\"}\");\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "class File extends Node { // 파일 노드 \n", " File(String name) { super(name); }\n", " @Override\n", " void display() { System.out.print(name); } // 파일 이름 출력\n", "}" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "File file1 = new File(\"hello.txt\");\n", "File file2 = new File(\"main.java\");\n", "File file3 = new File(\"index.html\");" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello.txt" ] } ], "source": [ "file1.display();" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "Node ns1[] = { file1, file2 };\n", "Dir dir1 = new Dir(\"Work\", ns1);" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Work{ hello.txt; main.java; }" ] } ], "source": [ "dir1.display();" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "Node ns2[] = { file3, dir1 };\n", "Dir dir2 = new Dir(\"Root\", ns2);" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Root{ index.html; Work{ hello.txt; main.java; }; }" ] } ], "source": [ "dir2.display();" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Java", "language": "java", "name": "java" }, "language_info": { "name": "java" } }, "nbformat": 4, "nbformat_minor": 4 }