From 408593f0b52ceab1e05bcc9439070735406e8d2f Mon Sep 17 00:00:00 2001 From: haerong22 Date: Wed, 3 Nov 2021 02:34:48 +0900 Subject: [PATCH] design patterns : singleton --- design-pattern/gof/settings.obj | Bin 0 -> 83 bytes design-pattern/gof/src/singleton/App.java | 53 ++++++++++++ .../gof/src/singleton/Settings.java | 78 ++++++++++++++++++ .../gof/src/singleton/SettingsEnum.java | 11 +++ .../src/AbstractFactory/Abstract Factory | 0 .../src/AbstractFactory/example01/Main.java | 0 .../example01/abst/BikeFactory.java | 0 .../AbstractFactory/example01/abst/Body.java | 0 .../AbstractFactory/example01/abst/Wheel.java | 0 .../example01/gt/GtBikeFactory.java | 0 .../AbstractFactory/example01/gt/GtBody.java | 0 .../AbstractFactory/example01/gt/GtWheel.java | 0 .../example01/sam/SamBody.java | 0 .../example01/sam/SamFactory.java | 0 .../example01/sam/SamWheel.java | 0 .../src/AbstractFactory/example02/Main.java | 0 .../example02/abst/Button.java | 0 .../example02/abst/GuiFactory.java | 0 .../example02/abst/TextArea.java | 0 .../example02/concrete/FactoryInstance.java | 0 .../{ => practice}/src/Adapter/Adapter | 0 .../{ => practice}/src/Adapter/Adapter.java | 0 .../src/Adapter/AdapterImpl.java | 0 .../{ => practice}/src/Adapter/Main.java | 0 .../{ => practice}/src/Adapter/Math.java | 0 .../{ => practice}/src/Bridge/Bridge | 0 .../{ => practice}/src/Bridge/DefaultMCF.java | 0 .../{ => practice}/src/Bridge/FlashMCF.java | 0 .../{ => practice}/src/Bridge/Main.java | 0 .../{ => practice}/src/Bridge/MorseCode.java | 0 .../src/Bridge/MorseCodeFunction.java | 0 .../src/Bridge/PrintMorseCode.java | 0 .../{ => practice}/src/Bridge/SoundMCF.java | 0 .../{ => practice}/src/Builder/Blueprint.java | 0 .../{ => practice}/src/Builder/Builder | 0 .../src/Builder/Builder2/Computer.java | 0 .../src/Builder/Builder2/ComputerBuilder.java | 0 .../src/Builder/Builder2/Main.java | 0 .../{ => practice}/src/Builder/Computer.java | 0 .../src/Builder/ComputerFactory.java | 0 .../src/Builder/LgGramBlueprint.java | 0 .../{ => practice}/src/Builder/Main.java | 0 .../Chain of Responsibility | 0 .../example01/Calculator.java | 0 .../ChainOfResponsibility/example01/Main.java | 0 .../example01/PlusCalculator.java | 0 .../example01/Request.java | 0 .../example01/SubCalculator.java | 0 .../example02/Application.java | 0 .../example02/Armor.java | 0 .../example02/Attack.java | 0 .../example02/Defense.java | 0 .../src/Command/Application.java | 0 .../{ => practice}/src/Command/Command | 0 .../{ => practice}/src/Command/Command.java | 0 .../src/Command/StringPrintCommand.java | 0 .../src/Composite/Component.java | 0 .../{ => practice}/src/Composite/Composite | 0 .../{ => practice}/src/Composite/File.java | 0 .../{ => practice}/src/Composite/Folder.java | 0 .../{ => practice}/src/Composite/Main.java | 0 .../{ => practice}/src/Decorator/Decorator | 0 .../{ => practice}/src/Decorator/Main.java | 0 .../src/Decorator/abst/AbstAdding.java | 0 .../src/Decorator/abst/IBeverage.java | 0 .../src/Decorator/concrete/Base.java | 0 .../src/Decorator/concrete/Espresso.java | 0 .../src/Decorator/concrete/Milk.java | 0 .../src/Facade/Application.java | 0 .../{ => practice}/src/Facade/Facade | 0 .../src/Facade/system/Facade.java | 0 .../src/Facade/system/HelpSystem01.java | 0 .../src/Facade/system/HelpSystem02.java | 0 .../src/Facade/system/HelpSystem03.java | 0 .../src/FactoryMethod/FactoryMethod | 0 .../src/FactoryMethod/Main.java | 0 .../src/FactoryMethod/concrete/HpCreator.java | 0 .../src/FactoryMethod/concrete/HpPotion.java | 0 .../src/FactoryMethod/concrete/MpCreator.java | 0 .../src/FactoryMethod/concrete/MpPotion.java | 0 .../src/FactoryMethod/framework/Item.java | 0 .../FactoryMethod/framework/ItemCreator.java | 0 .../src/Flyweight/Application.java | 0 .../{ => practice}/src/Flyweight/Flyweight | 0 .../src/Flyweight/Flyweight.java | 0 .../src/Flyweight/FlyweightFactory.java | 0 .../src/Mediator/Application.java | 0 .../src/Mediator/ChatColleague.java | 0 .../src/Mediator/ChatMediator.java | 0 .../{ => practice}/src/Mediator/Mediator | 0 .../src/Mediator/contract/Colleague.java | 0 .../src/Mediator/contract/Mediator.java | 0 .../src/Memento/Application.java | 0 .../{ => practice}/src/Memento/Memento | 0 .../src/Memento/abc/Memento.java | 0 .../src/Memento/abc/Originator.java | 0 .../{ => practice}/src/Observer/Observer | 0 .../src/Observer/example01/Application.java | 0 .../src/Observer/example01/Button.java | 0 .../src/Observer/example02/Application.java | 0 .../src/Observer/example02/Button.java | 0 .../src/Observer/example03/Application.java | 0 .../src/Observer/example03/Button.java | 0 .../src/Observer/example03/Observable.java | 0 .../{ => practice}/src/Prototype/Circle.java | 0 .../{ => practice}/src/Prototype/Main.java | 0 .../{ => practice}/src/Prototype/Prototype | 0 .../{ => practice}/src/Prototype/Shape.java | 0 .../src/Prototype/copy/Age.java | 0 .../src/Prototype/copy/Cat.java | 0 .../src/Prototype/copy/Main.java | 0 .../{ => practice}/src/Proxy/Application.java | 0 design-pattern/{ => practice}/src/Proxy/Proxy | 0 .../{ => practice}/src/Proxy/Proxy.java | 0 .../{ => practice}/src/Proxy/RealSubject.java | 0 .../{ => practice}/src/Proxy/Subject.java | 0 .../{ => practice}/src/Singleton/Main.java | 0 .../{ => practice}/src/Singleton/Singleton | 0 .../src/Singleton/SystemSpeaker.java | 0 .../{ => practice}/src/State/Application.java | 0 .../{ => practice}/src/State/Light.java | 0 design-pattern/{ => practice}/src/State/State | 0 .../{ => practice}/src/Strategy/AObj.java | 0 .../src/Strategy/Ainterface.java | 0 .../src/Strategy/AinterfaceImpl.java | 0 .../{ => practice}/src/Strategy/Ax.java | 0 .../src/Strategy/GameCharacter.java | 0 .../{ => practice}/src/Strategy/Gun.java | 0 .../{ => practice}/src/Strategy/Main.java | 0 .../{ => practice}/src/Strategy/Strategy | 0 .../{ => practice}/src/Strategy/Sword.java | 0 .../{ => practice}/src/Strategy/Weapon.java | 0 .../src/TemplateMethod/Main.java | 0 .../src/TemplateMethod/Template Method | 0 .../connection/AbstGameConnectHelper.java | 0 .../connection/DefaultGameConnectHelper.java | 0 .../src/Visitor/Application.java | 0 .../{ => practice}/src/Visitor/Visitable.java | 0 .../src/Visitor/VisitableA.java | 0 .../{ => practice}/src/Visitor/Visitor | 0 .../{ => practice}/src/Visitor/Visitor.java | 0 .../{ => practice}/src/Visitor/VisitorA.java | 0 142 files changed, 142 insertions(+) create mode 100644 design-pattern/gof/settings.obj create mode 100644 design-pattern/gof/src/singleton/App.java create mode 100644 design-pattern/gof/src/singleton/Settings.java create mode 100644 design-pattern/gof/src/singleton/SettingsEnum.java rename design-pattern/{ => practice}/src/AbstractFactory/Abstract Factory (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/Main.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/abst/BikeFactory.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/abst/Body.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/abst/Wheel.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/gt/GtBikeFactory.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/gt/GtBody.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/gt/GtWheel.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/sam/SamBody.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/sam/SamFactory.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example01/sam/SamWheel.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example02/Main.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example02/abst/Button.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example02/abst/GuiFactory.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example02/abst/TextArea.java (100%) rename design-pattern/{ => practice}/src/AbstractFactory/example02/concrete/FactoryInstance.java (100%) rename design-pattern/{ => practice}/src/Adapter/Adapter (100%) rename design-pattern/{ => practice}/src/Adapter/Adapter.java (100%) rename design-pattern/{ => practice}/src/Adapter/AdapterImpl.java (100%) rename design-pattern/{ => practice}/src/Adapter/Main.java (100%) rename design-pattern/{ => practice}/src/Adapter/Math.java (100%) rename design-pattern/{ => practice}/src/Bridge/Bridge (100%) rename design-pattern/{ => practice}/src/Bridge/DefaultMCF.java (100%) rename design-pattern/{ => practice}/src/Bridge/FlashMCF.java (100%) rename design-pattern/{ => practice}/src/Bridge/Main.java (100%) rename design-pattern/{ => practice}/src/Bridge/MorseCode.java (100%) rename design-pattern/{ => practice}/src/Bridge/MorseCodeFunction.java (100%) rename design-pattern/{ => practice}/src/Bridge/PrintMorseCode.java (100%) rename design-pattern/{ => practice}/src/Bridge/SoundMCF.java (100%) rename design-pattern/{ => practice}/src/Builder/Blueprint.java (100%) rename design-pattern/{ => practice}/src/Builder/Builder (100%) rename design-pattern/{ => practice}/src/Builder/Builder2/Computer.java (100%) rename design-pattern/{ => practice}/src/Builder/Builder2/ComputerBuilder.java (100%) rename design-pattern/{ => practice}/src/Builder/Builder2/Main.java (100%) rename design-pattern/{ => practice}/src/Builder/Computer.java (100%) rename design-pattern/{ => practice}/src/Builder/ComputerFactory.java (100%) rename design-pattern/{ => practice}/src/Builder/LgGramBlueprint.java (100%) rename design-pattern/{ => practice}/src/Builder/Main.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/Chain of Responsibility (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example01/Calculator.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example01/Main.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example01/PlusCalculator.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example01/Request.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example01/SubCalculator.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example02/Application.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example02/Armor.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example02/Attack.java (100%) rename design-pattern/{ => practice}/src/ChainOfResponsibility/example02/Defense.java (100%) rename design-pattern/{ => practice}/src/Command/Application.java (100%) rename design-pattern/{ => practice}/src/Command/Command (100%) rename design-pattern/{ => practice}/src/Command/Command.java (100%) rename design-pattern/{ => practice}/src/Command/StringPrintCommand.java (100%) rename design-pattern/{ => practice}/src/Composite/Component.java (100%) rename design-pattern/{ => practice}/src/Composite/Composite (100%) rename design-pattern/{ => practice}/src/Composite/File.java (100%) rename design-pattern/{ => practice}/src/Composite/Folder.java (100%) rename design-pattern/{ => practice}/src/Composite/Main.java (100%) rename design-pattern/{ => practice}/src/Decorator/Decorator (100%) rename design-pattern/{ => practice}/src/Decorator/Main.java (100%) rename design-pattern/{ => practice}/src/Decorator/abst/AbstAdding.java (100%) rename design-pattern/{ => practice}/src/Decorator/abst/IBeverage.java (100%) rename design-pattern/{ => practice}/src/Decorator/concrete/Base.java (100%) rename design-pattern/{ => practice}/src/Decorator/concrete/Espresso.java (100%) rename design-pattern/{ => practice}/src/Decorator/concrete/Milk.java (100%) rename design-pattern/{ => practice}/src/Facade/Application.java (100%) rename design-pattern/{ => practice}/src/Facade/Facade (100%) rename design-pattern/{ => practice}/src/Facade/system/Facade.java (100%) rename design-pattern/{ => practice}/src/Facade/system/HelpSystem01.java (100%) rename design-pattern/{ => practice}/src/Facade/system/HelpSystem02.java (100%) rename design-pattern/{ => practice}/src/Facade/system/HelpSystem03.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/FactoryMethod (100%) rename design-pattern/{ => practice}/src/FactoryMethod/Main.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/concrete/HpCreator.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/concrete/HpPotion.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/concrete/MpCreator.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/concrete/MpPotion.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/framework/Item.java (100%) rename design-pattern/{ => practice}/src/FactoryMethod/framework/ItemCreator.java (100%) rename design-pattern/{ => practice}/src/Flyweight/Application.java (100%) rename design-pattern/{ => practice}/src/Flyweight/Flyweight (100%) rename design-pattern/{ => practice}/src/Flyweight/Flyweight.java (100%) rename design-pattern/{ => practice}/src/Flyweight/FlyweightFactory.java (100%) rename design-pattern/{ => practice}/src/Mediator/Application.java (100%) rename design-pattern/{ => practice}/src/Mediator/ChatColleague.java (100%) rename design-pattern/{ => practice}/src/Mediator/ChatMediator.java (100%) rename design-pattern/{ => practice}/src/Mediator/Mediator (100%) rename design-pattern/{ => practice}/src/Mediator/contract/Colleague.java (100%) rename design-pattern/{ => practice}/src/Mediator/contract/Mediator.java (100%) rename design-pattern/{ => practice}/src/Memento/Application.java (100%) rename design-pattern/{ => practice}/src/Memento/Memento (100%) rename design-pattern/{ => practice}/src/Memento/abc/Memento.java (100%) rename design-pattern/{ => practice}/src/Memento/abc/Originator.java (100%) rename design-pattern/{ => practice}/src/Observer/Observer (100%) rename design-pattern/{ => practice}/src/Observer/example01/Application.java (100%) rename design-pattern/{ => practice}/src/Observer/example01/Button.java (100%) rename design-pattern/{ => practice}/src/Observer/example02/Application.java (100%) rename design-pattern/{ => practice}/src/Observer/example02/Button.java (100%) rename design-pattern/{ => practice}/src/Observer/example03/Application.java (100%) rename design-pattern/{ => practice}/src/Observer/example03/Button.java (100%) rename design-pattern/{ => practice}/src/Observer/example03/Observable.java (100%) rename design-pattern/{ => practice}/src/Prototype/Circle.java (100%) rename design-pattern/{ => practice}/src/Prototype/Main.java (100%) rename design-pattern/{ => practice}/src/Prototype/Prototype (100%) rename design-pattern/{ => practice}/src/Prototype/Shape.java (100%) rename design-pattern/{ => practice}/src/Prototype/copy/Age.java (100%) rename design-pattern/{ => practice}/src/Prototype/copy/Cat.java (100%) rename design-pattern/{ => practice}/src/Prototype/copy/Main.java (100%) rename design-pattern/{ => practice}/src/Proxy/Application.java (100%) rename design-pattern/{ => practice}/src/Proxy/Proxy (100%) rename design-pattern/{ => practice}/src/Proxy/Proxy.java (100%) rename design-pattern/{ => practice}/src/Proxy/RealSubject.java (100%) rename design-pattern/{ => practice}/src/Proxy/Subject.java (100%) rename design-pattern/{ => practice}/src/Singleton/Main.java (100%) rename design-pattern/{ => practice}/src/Singleton/Singleton (100%) rename design-pattern/{ => practice}/src/Singleton/SystemSpeaker.java (100%) rename design-pattern/{ => practice}/src/State/Application.java (100%) rename design-pattern/{ => practice}/src/State/Light.java (100%) rename design-pattern/{ => practice}/src/State/State (100%) rename design-pattern/{ => practice}/src/Strategy/AObj.java (100%) rename design-pattern/{ => practice}/src/Strategy/Ainterface.java (100%) rename design-pattern/{ => practice}/src/Strategy/AinterfaceImpl.java (100%) rename design-pattern/{ => practice}/src/Strategy/Ax.java (100%) rename design-pattern/{ => practice}/src/Strategy/GameCharacter.java (100%) rename design-pattern/{ => practice}/src/Strategy/Gun.java (100%) rename design-pattern/{ => practice}/src/Strategy/Main.java (100%) rename design-pattern/{ => practice}/src/Strategy/Strategy (100%) rename design-pattern/{ => practice}/src/Strategy/Sword.java (100%) rename design-pattern/{ => practice}/src/Strategy/Weapon.java (100%) rename design-pattern/{ => practice}/src/TemplateMethod/Main.java (100%) rename design-pattern/{ => practice}/src/TemplateMethod/Template Method (100%) rename design-pattern/{ => practice}/src/TemplateMethod/connection/AbstGameConnectHelper.java (100%) rename design-pattern/{ => practice}/src/TemplateMethod/connection/DefaultGameConnectHelper.java (100%) rename design-pattern/{ => practice}/src/Visitor/Application.java (100%) rename design-pattern/{ => practice}/src/Visitor/Visitable.java (100%) rename design-pattern/{ => practice}/src/Visitor/VisitableA.java (100%) rename design-pattern/{ => practice}/src/Visitor/Visitor (100%) rename design-pattern/{ => practice}/src/Visitor/Visitor.java (100%) rename design-pattern/{ => practice}/src/Visitor/VisitorA.java (100%) diff --git a/design-pattern/gof/settings.obj b/design-pattern/gof/settings.obj new file mode 100644 index 0000000000000000000000000000000000000000..ab6661442eb17ed6402f4226137b3bfa2856ad82 GIT binary patch literal 83 zcmZ4UmVvddh(WA4GcP?SwIn}JFF3WN1js3N%`44ifC3=~hKeEvzO2NuM7^BEymUQu R$$}CF4o|<}5Jx{}R{#Jf6_x-1 literal 0 HcmV?d00001 diff --git a/design-pattern/gof/src/singleton/App.java b/design-pattern/gof/src/singleton/App.java new file mode 100644 index 00000000..60706403 --- /dev/null +++ b/design-pattern/gof/src/singleton/App.java @@ -0,0 +1,53 @@ +package singleton; + +import java.io.*; +import java.lang.reflect.Constructor; + +public class App { + public static void main(String[] args) throws Exception { + + Settings instance = Settings.getInstance(); + Settings instance1 = Settings.getInstance(); + System.out.println(instance == instance1); + + // 싱글톤 패턴 구현 방법을 깨트리는 방법 + + // 1. reflection + Constructor constructor = Settings.class.getDeclaredConstructor(); + constructor.setAccessible(true); + Settings instance2 = constructor.newInstance(); + System.out.println(instance == instance2); + + // 2. 직렬화, 역직렬화 (readResolve()로 해결) + Settings instance3 = null; + try (ObjectOutput out = new ObjectOutputStream(new FileOutputStream("settings.obj"))) { + out.writeObject(instance); + } + try (ObjectInput in = new ObjectInputStream(new FileInputStream("settings.obj"))) { + instance3 = (Settings) in.readObject(); + } + System.out.println(instance == instance3); + + + SettingsEnum instance4 = SettingsEnum.INSTANCE; + + // enum 타입은 reflection 으로 생성 불가 + SettingsEnum instance5 = null; +// Constructor[] declaredConstructors = SettingsEnum.class.getDeclaredConstructors(); +// for (Constructor declaredConstructor : declaredConstructors) { +// declaredConstructor.setAccessible(true); +// instance5 = (SettingsEnum) declaredConstructor.newInstance("INSTANCE"); +// } +// System.out.println(instance4 == instance5); + + SettingsEnum instance6 = null; + try (ObjectOutput out = new ObjectOutputStream(new FileOutputStream("settings.obj"))) { + out.writeObject(instance4); + } + try (ObjectInput in = new ObjectInputStream(new FileInputStream("settings.obj"))) { + instance6 = (SettingsEnum) in.readObject(); + } + + System.out.println(instance4 == instance6); + } +} diff --git a/design-pattern/gof/src/singleton/Settings.java b/design-pattern/gof/src/singleton/Settings.java new file mode 100644 index 00000000..2170c2ab --- /dev/null +++ b/design-pattern/gof/src/singleton/Settings.java @@ -0,0 +1,78 @@ +package singleton; + +import java.io.Serializable; + +public class Settings implements Serializable { // 직렬화 + + /** + * Thread Safe 하게 Singleton 구현하기 + * 1. synchronized 키워드 사용 + * 매번 동기화 과정에서 리소스를 사용하므로 성능저하의 원인이 될 수 있다. + */ +// private static Settings instance; +// +// private Settings() {} +// +// public static synchronized Settings getInstance() { +// if (instance == null) { +// instance = new Settings(); +// } +// return instance; +// } + + /** + * Thread Safe 하게 Singleton 구현하기 + * 2. 클래스 로딩시 초기화 (eager initialization) + * 인스턴스를 만드는 과정이 리소스가 많이 든다면 자주 사용하지 않는 경우 낭비가 될 수 있다. + */ +// private static final Settings INSTANCE = new Settings(); +// +// private Settings() {} +// +// public static Settings getInstance() { +// return INSTANCE; +// } + + /** + * Thread Safe 하게 Singleton 구현하기 + * 3. double checked locking (java 1.5 이상) + * 인스턴스가 있는 경우에는 synchronized 블럭을 사용하지 않기 때문에 + * 메소드에 synchronized 를 사용한 것과 다르다. + */ +// private static volatile Settings instance; +// +// private Settings() {} +// +// public static Settings getInstance() { +// if (instance == null) { +// synchronized (Settings.class) { +// if (instance == null) { +// instance = new Settings(); +// } +// } +// } +// return instance; +// } + + /** + * Thread Safe 하게 Singleton 구현하기 + * 4. static inner class 사용 + * SettingsHolder.INSTANCE 가 호출 될 때 인스턴스가 생성 된다. (lazy loading) + */ + + private Settings() {} + + private static class SettingsHolder { + private static final Settings INSTANCE = new Settings(); + } + + public static Settings getInstance() { + return SettingsHolder.INSTANCE; + } + + // 역직렬화 시 기본은 인스턴스를 생성하지만 readResolve()가 있으면 + // 이 메소드를 사용하게 된다. + protected Object readResolve() { + return getInstance(); + } +} diff --git a/design-pattern/gof/src/singleton/SettingsEnum.java b/design-pattern/gof/src/singleton/SettingsEnum.java new file mode 100644 index 00000000..620ff090 --- /dev/null +++ b/design-pattern/gof/src/singleton/SettingsEnum.java @@ -0,0 +1,11 @@ +package singleton; + +// enum 으로 구현하면 간단하게 해결 가능하다. +// enum 은 Serializable 을 상속받고 있다. +// eager loading +// 상속을 받지 못한다. +public enum SettingsEnum { + + INSTANCE; + +} diff --git a/design-pattern/src/AbstractFactory/Abstract Factory b/design-pattern/practice/src/AbstractFactory/Abstract Factory similarity index 100% rename from design-pattern/src/AbstractFactory/Abstract Factory rename to design-pattern/practice/src/AbstractFactory/Abstract Factory diff --git a/design-pattern/src/AbstractFactory/example01/Main.java b/design-pattern/practice/src/AbstractFactory/example01/Main.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/Main.java rename to design-pattern/practice/src/AbstractFactory/example01/Main.java diff --git a/design-pattern/src/AbstractFactory/example01/abst/BikeFactory.java b/design-pattern/practice/src/AbstractFactory/example01/abst/BikeFactory.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/abst/BikeFactory.java rename to design-pattern/practice/src/AbstractFactory/example01/abst/BikeFactory.java diff --git a/design-pattern/src/AbstractFactory/example01/abst/Body.java b/design-pattern/practice/src/AbstractFactory/example01/abst/Body.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/abst/Body.java rename to design-pattern/practice/src/AbstractFactory/example01/abst/Body.java diff --git a/design-pattern/src/AbstractFactory/example01/abst/Wheel.java b/design-pattern/practice/src/AbstractFactory/example01/abst/Wheel.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/abst/Wheel.java rename to design-pattern/practice/src/AbstractFactory/example01/abst/Wheel.java diff --git a/design-pattern/src/AbstractFactory/example01/gt/GtBikeFactory.java b/design-pattern/practice/src/AbstractFactory/example01/gt/GtBikeFactory.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/gt/GtBikeFactory.java rename to design-pattern/practice/src/AbstractFactory/example01/gt/GtBikeFactory.java diff --git a/design-pattern/src/AbstractFactory/example01/gt/GtBody.java b/design-pattern/practice/src/AbstractFactory/example01/gt/GtBody.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/gt/GtBody.java rename to design-pattern/practice/src/AbstractFactory/example01/gt/GtBody.java diff --git a/design-pattern/src/AbstractFactory/example01/gt/GtWheel.java b/design-pattern/practice/src/AbstractFactory/example01/gt/GtWheel.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/gt/GtWheel.java rename to design-pattern/practice/src/AbstractFactory/example01/gt/GtWheel.java diff --git a/design-pattern/src/AbstractFactory/example01/sam/SamBody.java b/design-pattern/practice/src/AbstractFactory/example01/sam/SamBody.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/sam/SamBody.java rename to design-pattern/practice/src/AbstractFactory/example01/sam/SamBody.java diff --git a/design-pattern/src/AbstractFactory/example01/sam/SamFactory.java b/design-pattern/practice/src/AbstractFactory/example01/sam/SamFactory.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/sam/SamFactory.java rename to design-pattern/practice/src/AbstractFactory/example01/sam/SamFactory.java diff --git a/design-pattern/src/AbstractFactory/example01/sam/SamWheel.java b/design-pattern/practice/src/AbstractFactory/example01/sam/SamWheel.java similarity index 100% rename from design-pattern/src/AbstractFactory/example01/sam/SamWheel.java rename to design-pattern/practice/src/AbstractFactory/example01/sam/SamWheel.java diff --git a/design-pattern/src/AbstractFactory/example02/Main.java b/design-pattern/practice/src/AbstractFactory/example02/Main.java similarity index 100% rename from design-pattern/src/AbstractFactory/example02/Main.java rename to design-pattern/practice/src/AbstractFactory/example02/Main.java diff --git a/design-pattern/src/AbstractFactory/example02/abst/Button.java b/design-pattern/practice/src/AbstractFactory/example02/abst/Button.java similarity index 100% rename from design-pattern/src/AbstractFactory/example02/abst/Button.java rename to design-pattern/practice/src/AbstractFactory/example02/abst/Button.java diff --git a/design-pattern/src/AbstractFactory/example02/abst/GuiFactory.java b/design-pattern/practice/src/AbstractFactory/example02/abst/GuiFactory.java similarity index 100% rename from design-pattern/src/AbstractFactory/example02/abst/GuiFactory.java rename to design-pattern/practice/src/AbstractFactory/example02/abst/GuiFactory.java diff --git a/design-pattern/src/AbstractFactory/example02/abst/TextArea.java b/design-pattern/practice/src/AbstractFactory/example02/abst/TextArea.java similarity index 100% rename from design-pattern/src/AbstractFactory/example02/abst/TextArea.java rename to design-pattern/practice/src/AbstractFactory/example02/abst/TextArea.java diff --git a/design-pattern/src/AbstractFactory/example02/concrete/FactoryInstance.java b/design-pattern/practice/src/AbstractFactory/example02/concrete/FactoryInstance.java similarity index 100% rename from design-pattern/src/AbstractFactory/example02/concrete/FactoryInstance.java rename to design-pattern/practice/src/AbstractFactory/example02/concrete/FactoryInstance.java diff --git a/design-pattern/src/Adapter/Adapter b/design-pattern/practice/src/Adapter/Adapter similarity index 100% rename from design-pattern/src/Adapter/Adapter rename to design-pattern/practice/src/Adapter/Adapter diff --git a/design-pattern/src/Adapter/Adapter.java b/design-pattern/practice/src/Adapter/Adapter.java similarity index 100% rename from design-pattern/src/Adapter/Adapter.java rename to design-pattern/practice/src/Adapter/Adapter.java diff --git a/design-pattern/src/Adapter/AdapterImpl.java b/design-pattern/practice/src/Adapter/AdapterImpl.java similarity index 100% rename from design-pattern/src/Adapter/AdapterImpl.java rename to design-pattern/practice/src/Adapter/AdapterImpl.java diff --git a/design-pattern/src/Adapter/Main.java b/design-pattern/practice/src/Adapter/Main.java similarity index 100% rename from design-pattern/src/Adapter/Main.java rename to design-pattern/practice/src/Adapter/Main.java diff --git a/design-pattern/src/Adapter/Math.java b/design-pattern/practice/src/Adapter/Math.java similarity index 100% rename from design-pattern/src/Adapter/Math.java rename to design-pattern/practice/src/Adapter/Math.java diff --git a/design-pattern/src/Bridge/Bridge b/design-pattern/practice/src/Bridge/Bridge similarity index 100% rename from design-pattern/src/Bridge/Bridge rename to design-pattern/practice/src/Bridge/Bridge diff --git a/design-pattern/src/Bridge/DefaultMCF.java b/design-pattern/practice/src/Bridge/DefaultMCF.java similarity index 100% rename from design-pattern/src/Bridge/DefaultMCF.java rename to design-pattern/practice/src/Bridge/DefaultMCF.java diff --git a/design-pattern/src/Bridge/FlashMCF.java b/design-pattern/practice/src/Bridge/FlashMCF.java similarity index 100% rename from design-pattern/src/Bridge/FlashMCF.java rename to design-pattern/practice/src/Bridge/FlashMCF.java diff --git a/design-pattern/src/Bridge/Main.java b/design-pattern/practice/src/Bridge/Main.java similarity index 100% rename from design-pattern/src/Bridge/Main.java rename to design-pattern/practice/src/Bridge/Main.java diff --git a/design-pattern/src/Bridge/MorseCode.java b/design-pattern/practice/src/Bridge/MorseCode.java similarity index 100% rename from design-pattern/src/Bridge/MorseCode.java rename to design-pattern/practice/src/Bridge/MorseCode.java diff --git a/design-pattern/src/Bridge/MorseCodeFunction.java b/design-pattern/practice/src/Bridge/MorseCodeFunction.java similarity index 100% rename from design-pattern/src/Bridge/MorseCodeFunction.java rename to design-pattern/practice/src/Bridge/MorseCodeFunction.java diff --git a/design-pattern/src/Bridge/PrintMorseCode.java b/design-pattern/practice/src/Bridge/PrintMorseCode.java similarity index 100% rename from design-pattern/src/Bridge/PrintMorseCode.java rename to design-pattern/practice/src/Bridge/PrintMorseCode.java diff --git a/design-pattern/src/Bridge/SoundMCF.java b/design-pattern/practice/src/Bridge/SoundMCF.java similarity index 100% rename from design-pattern/src/Bridge/SoundMCF.java rename to design-pattern/practice/src/Bridge/SoundMCF.java diff --git a/design-pattern/src/Builder/Blueprint.java b/design-pattern/practice/src/Builder/Blueprint.java similarity index 100% rename from design-pattern/src/Builder/Blueprint.java rename to design-pattern/practice/src/Builder/Blueprint.java diff --git a/design-pattern/src/Builder/Builder b/design-pattern/practice/src/Builder/Builder similarity index 100% rename from design-pattern/src/Builder/Builder rename to design-pattern/practice/src/Builder/Builder diff --git a/design-pattern/src/Builder/Builder2/Computer.java b/design-pattern/practice/src/Builder/Builder2/Computer.java similarity index 100% rename from design-pattern/src/Builder/Builder2/Computer.java rename to design-pattern/practice/src/Builder/Builder2/Computer.java diff --git a/design-pattern/src/Builder/Builder2/ComputerBuilder.java b/design-pattern/practice/src/Builder/Builder2/ComputerBuilder.java similarity index 100% rename from design-pattern/src/Builder/Builder2/ComputerBuilder.java rename to design-pattern/practice/src/Builder/Builder2/ComputerBuilder.java diff --git a/design-pattern/src/Builder/Builder2/Main.java b/design-pattern/practice/src/Builder/Builder2/Main.java similarity index 100% rename from design-pattern/src/Builder/Builder2/Main.java rename to design-pattern/practice/src/Builder/Builder2/Main.java diff --git a/design-pattern/src/Builder/Computer.java b/design-pattern/practice/src/Builder/Computer.java similarity index 100% rename from design-pattern/src/Builder/Computer.java rename to design-pattern/practice/src/Builder/Computer.java diff --git a/design-pattern/src/Builder/ComputerFactory.java b/design-pattern/practice/src/Builder/ComputerFactory.java similarity index 100% rename from design-pattern/src/Builder/ComputerFactory.java rename to design-pattern/practice/src/Builder/ComputerFactory.java diff --git a/design-pattern/src/Builder/LgGramBlueprint.java b/design-pattern/practice/src/Builder/LgGramBlueprint.java similarity index 100% rename from design-pattern/src/Builder/LgGramBlueprint.java rename to design-pattern/practice/src/Builder/LgGramBlueprint.java diff --git a/design-pattern/src/Builder/Main.java b/design-pattern/practice/src/Builder/Main.java similarity index 100% rename from design-pattern/src/Builder/Main.java rename to design-pattern/practice/src/Builder/Main.java diff --git a/design-pattern/src/ChainOfResponsibility/Chain of Responsibility b/design-pattern/practice/src/ChainOfResponsibility/Chain of Responsibility similarity index 100% rename from design-pattern/src/ChainOfResponsibility/Chain of Responsibility rename to design-pattern/practice/src/ChainOfResponsibility/Chain of Responsibility diff --git a/design-pattern/src/ChainOfResponsibility/example01/Calculator.java b/design-pattern/practice/src/ChainOfResponsibility/example01/Calculator.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example01/Calculator.java rename to design-pattern/practice/src/ChainOfResponsibility/example01/Calculator.java diff --git a/design-pattern/src/ChainOfResponsibility/example01/Main.java b/design-pattern/practice/src/ChainOfResponsibility/example01/Main.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example01/Main.java rename to design-pattern/practice/src/ChainOfResponsibility/example01/Main.java diff --git a/design-pattern/src/ChainOfResponsibility/example01/PlusCalculator.java b/design-pattern/practice/src/ChainOfResponsibility/example01/PlusCalculator.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example01/PlusCalculator.java rename to design-pattern/practice/src/ChainOfResponsibility/example01/PlusCalculator.java diff --git a/design-pattern/src/ChainOfResponsibility/example01/Request.java b/design-pattern/practice/src/ChainOfResponsibility/example01/Request.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example01/Request.java rename to design-pattern/practice/src/ChainOfResponsibility/example01/Request.java diff --git a/design-pattern/src/ChainOfResponsibility/example01/SubCalculator.java b/design-pattern/practice/src/ChainOfResponsibility/example01/SubCalculator.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example01/SubCalculator.java rename to design-pattern/practice/src/ChainOfResponsibility/example01/SubCalculator.java diff --git a/design-pattern/src/ChainOfResponsibility/example02/Application.java b/design-pattern/practice/src/ChainOfResponsibility/example02/Application.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example02/Application.java rename to design-pattern/practice/src/ChainOfResponsibility/example02/Application.java diff --git a/design-pattern/src/ChainOfResponsibility/example02/Armor.java b/design-pattern/practice/src/ChainOfResponsibility/example02/Armor.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example02/Armor.java rename to design-pattern/practice/src/ChainOfResponsibility/example02/Armor.java diff --git a/design-pattern/src/ChainOfResponsibility/example02/Attack.java b/design-pattern/practice/src/ChainOfResponsibility/example02/Attack.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example02/Attack.java rename to design-pattern/practice/src/ChainOfResponsibility/example02/Attack.java diff --git a/design-pattern/src/ChainOfResponsibility/example02/Defense.java b/design-pattern/practice/src/ChainOfResponsibility/example02/Defense.java similarity index 100% rename from design-pattern/src/ChainOfResponsibility/example02/Defense.java rename to design-pattern/practice/src/ChainOfResponsibility/example02/Defense.java diff --git a/design-pattern/src/Command/Application.java b/design-pattern/practice/src/Command/Application.java similarity index 100% rename from design-pattern/src/Command/Application.java rename to design-pattern/practice/src/Command/Application.java diff --git a/design-pattern/src/Command/Command b/design-pattern/practice/src/Command/Command similarity index 100% rename from design-pattern/src/Command/Command rename to design-pattern/practice/src/Command/Command diff --git a/design-pattern/src/Command/Command.java b/design-pattern/practice/src/Command/Command.java similarity index 100% rename from design-pattern/src/Command/Command.java rename to design-pattern/practice/src/Command/Command.java diff --git a/design-pattern/src/Command/StringPrintCommand.java b/design-pattern/practice/src/Command/StringPrintCommand.java similarity index 100% rename from design-pattern/src/Command/StringPrintCommand.java rename to design-pattern/practice/src/Command/StringPrintCommand.java diff --git a/design-pattern/src/Composite/Component.java b/design-pattern/practice/src/Composite/Component.java similarity index 100% rename from design-pattern/src/Composite/Component.java rename to design-pattern/practice/src/Composite/Component.java diff --git a/design-pattern/src/Composite/Composite b/design-pattern/practice/src/Composite/Composite similarity index 100% rename from design-pattern/src/Composite/Composite rename to design-pattern/practice/src/Composite/Composite diff --git a/design-pattern/src/Composite/File.java b/design-pattern/practice/src/Composite/File.java similarity index 100% rename from design-pattern/src/Composite/File.java rename to design-pattern/practice/src/Composite/File.java diff --git a/design-pattern/src/Composite/Folder.java b/design-pattern/practice/src/Composite/Folder.java similarity index 100% rename from design-pattern/src/Composite/Folder.java rename to design-pattern/practice/src/Composite/Folder.java diff --git a/design-pattern/src/Composite/Main.java b/design-pattern/practice/src/Composite/Main.java similarity index 100% rename from design-pattern/src/Composite/Main.java rename to design-pattern/practice/src/Composite/Main.java diff --git a/design-pattern/src/Decorator/Decorator b/design-pattern/practice/src/Decorator/Decorator similarity index 100% rename from design-pattern/src/Decorator/Decorator rename to design-pattern/practice/src/Decorator/Decorator diff --git a/design-pattern/src/Decorator/Main.java b/design-pattern/practice/src/Decorator/Main.java similarity index 100% rename from design-pattern/src/Decorator/Main.java rename to design-pattern/practice/src/Decorator/Main.java diff --git a/design-pattern/src/Decorator/abst/AbstAdding.java b/design-pattern/practice/src/Decorator/abst/AbstAdding.java similarity index 100% rename from design-pattern/src/Decorator/abst/AbstAdding.java rename to design-pattern/practice/src/Decorator/abst/AbstAdding.java diff --git a/design-pattern/src/Decorator/abst/IBeverage.java b/design-pattern/practice/src/Decorator/abst/IBeverage.java similarity index 100% rename from design-pattern/src/Decorator/abst/IBeverage.java rename to design-pattern/practice/src/Decorator/abst/IBeverage.java diff --git a/design-pattern/src/Decorator/concrete/Base.java b/design-pattern/practice/src/Decorator/concrete/Base.java similarity index 100% rename from design-pattern/src/Decorator/concrete/Base.java rename to design-pattern/practice/src/Decorator/concrete/Base.java diff --git a/design-pattern/src/Decorator/concrete/Espresso.java b/design-pattern/practice/src/Decorator/concrete/Espresso.java similarity index 100% rename from design-pattern/src/Decorator/concrete/Espresso.java rename to design-pattern/practice/src/Decorator/concrete/Espresso.java diff --git a/design-pattern/src/Decorator/concrete/Milk.java b/design-pattern/practice/src/Decorator/concrete/Milk.java similarity index 100% rename from design-pattern/src/Decorator/concrete/Milk.java rename to design-pattern/practice/src/Decorator/concrete/Milk.java diff --git a/design-pattern/src/Facade/Application.java b/design-pattern/practice/src/Facade/Application.java similarity index 100% rename from design-pattern/src/Facade/Application.java rename to design-pattern/practice/src/Facade/Application.java diff --git a/design-pattern/src/Facade/Facade b/design-pattern/practice/src/Facade/Facade similarity index 100% rename from design-pattern/src/Facade/Facade rename to design-pattern/practice/src/Facade/Facade diff --git a/design-pattern/src/Facade/system/Facade.java b/design-pattern/practice/src/Facade/system/Facade.java similarity index 100% rename from design-pattern/src/Facade/system/Facade.java rename to design-pattern/practice/src/Facade/system/Facade.java diff --git a/design-pattern/src/Facade/system/HelpSystem01.java b/design-pattern/practice/src/Facade/system/HelpSystem01.java similarity index 100% rename from design-pattern/src/Facade/system/HelpSystem01.java rename to design-pattern/practice/src/Facade/system/HelpSystem01.java diff --git a/design-pattern/src/Facade/system/HelpSystem02.java b/design-pattern/practice/src/Facade/system/HelpSystem02.java similarity index 100% rename from design-pattern/src/Facade/system/HelpSystem02.java rename to design-pattern/practice/src/Facade/system/HelpSystem02.java diff --git a/design-pattern/src/Facade/system/HelpSystem03.java b/design-pattern/practice/src/Facade/system/HelpSystem03.java similarity index 100% rename from design-pattern/src/Facade/system/HelpSystem03.java rename to design-pattern/practice/src/Facade/system/HelpSystem03.java diff --git a/design-pattern/src/FactoryMethod/FactoryMethod b/design-pattern/practice/src/FactoryMethod/FactoryMethod similarity index 100% rename from design-pattern/src/FactoryMethod/FactoryMethod rename to design-pattern/practice/src/FactoryMethod/FactoryMethod diff --git a/design-pattern/src/FactoryMethod/Main.java b/design-pattern/practice/src/FactoryMethod/Main.java similarity index 100% rename from design-pattern/src/FactoryMethod/Main.java rename to design-pattern/practice/src/FactoryMethod/Main.java diff --git a/design-pattern/src/FactoryMethod/concrete/HpCreator.java b/design-pattern/practice/src/FactoryMethod/concrete/HpCreator.java similarity index 100% rename from design-pattern/src/FactoryMethod/concrete/HpCreator.java rename to design-pattern/practice/src/FactoryMethod/concrete/HpCreator.java diff --git a/design-pattern/src/FactoryMethod/concrete/HpPotion.java b/design-pattern/practice/src/FactoryMethod/concrete/HpPotion.java similarity index 100% rename from design-pattern/src/FactoryMethod/concrete/HpPotion.java rename to design-pattern/practice/src/FactoryMethod/concrete/HpPotion.java diff --git a/design-pattern/src/FactoryMethod/concrete/MpCreator.java b/design-pattern/practice/src/FactoryMethod/concrete/MpCreator.java similarity index 100% rename from design-pattern/src/FactoryMethod/concrete/MpCreator.java rename to design-pattern/practice/src/FactoryMethod/concrete/MpCreator.java diff --git a/design-pattern/src/FactoryMethod/concrete/MpPotion.java b/design-pattern/practice/src/FactoryMethod/concrete/MpPotion.java similarity index 100% rename from design-pattern/src/FactoryMethod/concrete/MpPotion.java rename to design-pattern/practice/src/FactoryMethod/concrete/MpPotion.java diff --git a/design-pattern/src/FactoryMethod/framework/Item.java b/design-pattern/practice/src/FactoryMethod/framework/Item.java similarity index 100% rename from design-pattern/src/FactoryMethod/framework/Item.java rename to design-pattern/practice/src/FactoryMethod/framework/Item.java diff --git a/design-pattern/src/FactoryMethod/framework/ItemCreator.java b/design-pattern/practice/src/FactoryMethod/framework/ItemCreator.java similarity index 100% rename from design-pattern/src/FactoryMethod/framework/ItemCreator.java rename to design-pattern/practice/src/FactoryMethod/framework/ItemCreator.java diff --git a/design-pattern/src/Flyweight/Application.java b/design-pattern/practice/src/Flyweight/Application.java similarity index 100% rename from design-pattern/src/Flyweight/Application.java rename to design-pattern/practice/src/Flyweight/Application.java diff --git a/design-pattern/src/Flyweight/Flyweight b/design-pattern/practice/src/Flyweight/Flyweight similarity index 100% rename from design-pattern/src/Flyweight/Flyweight rename to design-pattern/practice/src/Flyweight/Flyweight diff --git a/design-pattern/src/Flyweight/Flyweight.java b/design-pattern/practice/src/Flyweight/Flyweight.java similarity index 100% rename from design-pattern/src/Flyweight/Flyweight.java rename to design-pattern/practice/src/Flyweight/Flyweight.java diff --git a/design-pattern/src/Flyweight/FlyweightFactory.java b/design-pattern/practice/src/Flyweight/FlyweightFactory.java similarity index 100% rename from design-pattern/src/Flyweight/FlyweightFactory.java rename to design-pattern/practice/src/Flyweight/FlyweightFactory.java diff --git a/design-pattern/src/Mediator/Application.java b/design-pattern/practice/src/Mediator/Application.java similarity index 100% rename from design-pattern/src/Mediator/Application.java rename to design-pattern/practice/src/Mediator/Application.java diff --git a/design-pattern/src/Mediator/ChatColleague.java b/design-pattern/practice/src/Mediator/ChatColleague.java similarity index 100% rename from design-pattern/src/Mediator/ChatColleague.java rename to design-pattern/practice/src/Mediator/ChatColleague.java diff --git a/design-pattern/src/Mediator/ChatMediator.java b/design-pattern/practice/src/Mediator/ChatMediator.java similarity index 100% rename from design-pattern/src/Mediator/ChatMediator.java rename to design-pattern/practice/src/Mediator/ChatMediator.java diff --git a/design-pattern/src/Mediator/Mediator b/design-pattern/practice/src/Mediator/Mediator similarity index 100% rename from design-pattern/src/Mediator/Mediator rename to design-pattern/practice/src/Mediator/Mediator diff --git a/design-pattern/src/Mediator/contract/Colleague.java b/design-pattern/practice/src/Mediator/contract/Colleague.java similarity index 100% rename from design-pattern/src/Mediator/contract/Colleague.java rename to design-pattern/practice/src/Mediator/contract/Colleague.java diff --git a/design-pattern/src/Mediator/contract/Mediator.java b/design-pattern/practice/src/Mediator/contract/Mediator.java similarity index 100% rename from design-pattern/src/Mediator/contract/Mediator.java rename to design-pattern/practice/src/Mediator/contract/Mediator.java diff --git a/design-pattern/src/Memento/Application.java b/design-pattern/practice/src/Memento/Application.java similarity index 100% rename from design-pattern/src/Memento/Application.java rename to design-pattern/practice/src/Memento/Application.java diff --git a/design-pattern/src/Memento/Memento b/design-pattern/practice/src/Memento/Memento similarity index 100% rename from design-pattern/src/Memento/Memento rename to design-pattern/practice/src/Memento/Memento diff --git a/design-pattern/src/Memento/abc/Memento.java b/design-pattern/practice/src/Memento/abc/Memento.java similarity index 100% rename from design-pattern/src/Memento/abc/Memento.java rename to design-pattern/practice/src/Memento/abc/Memento.java diff --git a/design-pattern/src/Memento/abc/Originator.java b/design-pattern/practice/src/Memento/abc/Originator.java similarity index 100% rename from design-pattern/src/Memento/abc/Originator.java rename to design-pattern/practice/src/Memento/abc/Originator.java diff --git a/design-pattern/src/Observer/Observer b/design-pattern/practice/src/Observer/Observer similarity index 100% rename from design-pattern/src/Observer/Observer rename to design-pattern/practice/src/Observer/Observer diff --git a/design-pattern/src/Observer/example01/Application.java b/design-pattern/practice/src/Observer/example01/Application.java similarity index 100% rename from design-pattern/src/Observer/example01/Application.java rename to design-pattern/practice/src/Observer/example01/Application.java diff --git a/design-pattern/src/Observer/example01/Button.java b/design-pattern/practice/src/Observer/example01/Button.java similarity index 100% rename from design-pattern/src/Observer/example01/Button.java rename to design-pattern/practice/src/Observer/example01/Button.java diff --git a/design-pattern/src/Observer/example02/Application.java b/design-pattern/practice/src/Observer/example02/Application.java similarity index 100% rename from design-pattern/src/Observer/example02/Application.java rename to design-pattern/practice/src/Observer/example02/Application.java diff --git a/design-pattern/src/Observer/example02/Button.java b/design-pattern/practice/src/Observer/example02/Button.java similarity index 100% rename from design-pattern/src/Observer/example02/Button.java rename to design-pattern/practice/src/Observer/example02/Button.java diff --git a/design-pattern/src/Observer/example03/Application.java b/design-pattern/practice/src/Observer/example03/Application.java similarity index 100% rename from design-pattern/src/Observer/example03/Application.java rename to design-pattern/practice/src/Observer/example03/Application.java diff --git a/design-pattern/src/Observer/example03/Button.java b/design-pattern/practice/src/Observer/example03/Button.java similarity index 100% rename from design-pattern/src/Observer/example03/Button.java rename to design-pattern/practice/src/Observer/example03/Button.java diff --git a/design-pattern/src/Observer/example03/Observable.java b/design-pattern/practice/src/Observer/example03/Observable.java similarity index 100% rename from design-pattern/src/Observer/example03/Observable.java rename to design-pattern/practice/src/Observer/example03/Observable.java diff --git a/design-pattern/src/Prototype/Circle.java b/design-pattern/practice/src/Prototype/Circle.java similarity index 100% rename from design-pattern/src/Prototype/Circle.java rename to design-pattern/practice/src/Prototype/Circle.java diff --git a/design-pattern/src/Prototype/Main.java b/design-pattern/practice/src/Prototype/Main.java similarity index 100% rename from design-pattern/src/Prototype/Main.java rename to design-pattern/practice/src/Prototype/Main.java diff --git a/design-pattern/src/Prototype/Prototype b/design-pattern/practice/src/Prototype/Prototype similarity index 100% rename from design-pattern/src/Prototype/Prototype rename to design-pattern/practice/src/Prototype/Prototype diff --git a/design-pattern/src/Prototype/Shape.java b/design-pattern/practice/src/Prototype/Shape.java similarity index 100% rename from design-pattern/src/Prototype/Shape.java rename to design-pattern/practice/src/Prototype/Shape.java diff --git a/design-pattern/src/Prototype/copy/Age.java b/design-pattern/practice/src/Prototype/copy/Age.java similarity index 100% rename from design-pattern/src/Prototype/copy/Age.java rename to design-pattern/practice/src/Prototype/copy/Age.java diff --git a/design-pattern/src/Prototype/copy/Cat.java b/design-pattern/practice/src/Prototype/copy/Cat.java similarity index 100% rename from design-pattern/src/Prototype/copy/Cat.java rename to design-pattern/practice/src/Prototype/copy/Cat.java diff --git a/design-pattern/src/Prototype/copy/Main.java b/design-pattern/practice/src/Prototype/copy/Main.java similarity index 100% rename from design-pattern/src/Prototype/copy/Main.java rename to design-pattern/practice/src/Prototype/copy/Main.java diff --git a/design-pattern/src/Proxy/Application.java b/design-pattern/practice/src/Proxy/Application.java similarity index 100% rename from design-pattern/src/Proxy/Application.java rename to design-pattern/practice/src/Proxy/Application.java diff --git a/design-pattern/src/Proxy/Proxy b/design-pattern/practice/src/Proxy/Proxy similarity index 100% rename from design-pattern/src/Proxy/Proxy rename to design-pattern/practice/src/Proxy/Proxy diff --git a/design-pattern/src/Proxy/Proxy.java b/design-pattern/practice/src/Proxy/Proxy.java similarity index 100% rename from design-pattern/src/Proxy/Proxy.java rename to design-pattern/practice/src/Proxy/Proxy.java diff --git a/design-pattern/src/Proxy/RealSubject.java b/design-pattern/practice/src/Proxy/RealSubject.java similarity index 100% rename from design-pattern/src/Proxy/RealSubject.java rename to design-pattern/practice/src/Proxy/RealSubject.java diff --git a/design-pattern/src/Proxy/Subject.java b/design-pattern/practice/src/Proxy/Subject.java similarity index 100% rename from design-pattern/src/Proxy/Subject.java rename to design-pattern/practice/src/Proxy/Subject.java diff --git a/design-pattern/src/Singleton/Main.java b/design-pattern/practice/src/Singleton/Main.java similarity index 100% rename from design-pattern/src/Singleton/Main.java rename to design-pattern/practice/src/Singleton/Main.java diff --git a/design-pattern/src/Singleton/Singleton b/design-pattern/practice/src/Singleton/Singleton similarity index 100% rename from design-pattern/src/Singleton/Singleton rename to design-pattern/practice/src/Singleton/Singleton diff --git a/design-pattern/src/Singleton/SystemSpeaker.java b/design-pattern/practice/src/Singleton/SystemSpeaker.java similarity index 100% rename from design-pattern/src/Singleton/SystemSpeaker.java rename to design-pattern/practice/src/Singleton/SystemSpeaker.java diff --git a/design-pattern/src/State/Application.java b/design-pattern/practice/src/State/Application.java similarity index 100% rename from design-pattern/src/State/Application.java rename to design-pattern/practice/src/State/Application.java diff --git a/design-pattern/src/State/Light.java b/design-pattern/practice/src/State/Light.java similarity index 100% rename from design-pattern/src/State/Light.java rename to design-pattern/practice/src/State/Light.java diff --git a/design-pattern/src/State/State b/design-pattern/practice/src/State/State similarity index 100% rename from design-pattern/src/State/State rename to design-pattern/practice/src/State/State diff --git a/design-pattern/src/Strategy/AObj.java b/design-pattern/practice/src/Strategy/AObj.java similarity index 100% rename from design-pattern/src/Strategy/AObj.java rename to design-pattern/practice/src/Strategy/AObj.java diff --git a/design-pattern/src/Strategy/Ainterface.java b/design-pattern/practice/src/Strategy/Ainterface.java similarity index 100% rename from design-pattern/src/Strategy/Ainterface.java rename to design-pattern/practice/src/Strategy/Ainterface.java diff --git a/design-pattern/src/Strategy/AinterfaceImpl.java b/design-pattern/practice/src/Strategy/AinterfaceImpl.java similarity index 100% rename from design-pattern/src/Strategy/AinterfaceImpl.java rename to design-pattern/practice/src/Strategy/AinterfaceImpl.java diff --git a/design-pattern/src/Strategy/Ax.java b/design-pattern/practice/src/Strategy/Ax.java similarity index 100% rename from design-pattern/src/Strategy/Ax.java rename to design-pattern/practice/src/Strategy/Ax.java diff --git a/design-pattern/src/Strategy/GameCharacter.java b/design-pattern/practice/src/Strategy/GameCharacter.java similarity index 100% rename from design-pattern/src/Strategy/GameCharacter.java rename to design-pattern/practice/src/Strategy/GameCharacter.java diff --git a/design-pattern/src/Strategy/Gun.java b/design-pattern/practice/src/Strategy/Gun.java similarity index 100% rename from design-pattern/src/Strategy/Gun.java rename to design-pattern/practice/src/Strategy/Gun.java diff --git a/design-pattern/src/Strategy/Main.java b/design-pattern/practice/src/Strategy/Main.java similarity index 100% rename from design-pattern/src/Strategy/Main.java rename to design-pattern/practice/src/Strategy/Main.java diff --git a/design-pattern/src/Strategy/Strategy b/design-pattern/practice/src/Strategy/Strategy similarity index 100% rename from design-pattern/src/Strategy/Strategy rename to design-pattern/practice/src/Strategy/Strategy diff --git a/design-pattern/src/Strategy/Sword.java b/design-pattern/practice/src/Strategy/Sword.java similarity index 100% rename from design-pattern/src/Strategy/Sword.java rename to design-pattern/practice/src/Strategy/Sword.java diff --git a/design-pattern/src/Strategy/Weapon.java b/design-pattern/practice/src/Strategy/Weapon.java similarity index 100% rename from design-pattern/src/Strategy/Weapon.java rename to design-pattern/practice/src/Strategy/Weapon.java diff --git a/design-pattern/src/TemplateMethod/Main.java b/design-pattern/practice/src/TemplateMethod/Main.java similarity index 100% rename from design-pattern/src/TemplateMethod/Main.java rename to design-pattern/practice/src/TemplateMethod/Main.java diff --git a/design-pattern/src/TemplateMethod/Template Method b/design-pattern/practice/src/TemplateMethod/Template Method similarity index 100% rename from design-pattern/src/TemplateMethod/Template Method rename to design-pattern/practice/src/TemplateMethod/Template Method diff --git a/design-pattern/src/TemplateMethod/connection/AbstGameConnectHelper.java b/design-pattern/practice/src/TemplateMethod/connection/AbstGameConnectHelper.java similarity index 100% rename from design-pattern/src/TemplateMethod/connection/AbstGameConnectHelper.java rename to design-pattern/practice/src/TemplateMethod/connection/AbstGameConnectHelper.java diff --git a/design-pattern/src/TemplateMethod/connection/DefaultGameConnectHelper.java b/design-pattern/practice/src/TemplateMethod/connection/DefaultGameConnectHelper.java similarity index 100% rename from design-pattern/src/TemplateMethod/connection/DefaultGameConnectHelper.java rename to design-pattern/practice/src/TemplateMethod/connection/DefaultGameConnectHelper.java diff --git a/design-pattern/src/Visitor/Application.java b/design-pattern/practice/src/Visitor/Application.java similarity index 100% rename from design-pattern/src/Visitor/Application.java rename to design-pattern/practice/src/Visitor/Application.java diff --git a/design-pattern/src/Visitor/Visitable.java b/design-pattern/practice/src/Visitor/Visitable.java similarity index 100% rename from design-pattern/src/Visitor/Visitable.java rename to design-pattern/practice/src/Visitor/Visitable.java diff --git a/design-pattern/src/Visitor/VisitableA.java b/design-pattern/practice/src/Visitor/VisitableA.java similarity index 100% rename from design-pattern/src/Visitor/VisitableA.java rename to design-pattern/practice/src/Visitor/VisitableA.java diff --git a/design-pattern/src/Visitor/Visitor b/design-pattern/practice/src/Visitor/Visitor similarity index 100% rename from design-pattern/src/Visitor/Visitor rename to design-pattern/practice/src/Visitor/Visitor diff --git a/design-pattern/src/Visitor/Visitor.java b/design-pattern/practice/src/Visitor/Visitor.java similarity index 100% rename from design-pattern/src/Visitor/Visitor.java rename to design-pattern/practice/src/Visitor/Visitor.java diff --git a/design-pattern/src/Visitor/VisitorA.java b/design-pattern/practice/src/Visitor/VisitorA.java similarity index 100% rename from design-pattern/src/Visitor/VisitorA.java rename to design-pattern/practice/src/Visitor/VisitorA.java