πμ½μ μ± μ 리 (39) μΈλ€μΌν 리μ€νΈν [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄] 6μ₯ : μ€νλ§μ΄ μ¬λν λμμΈ ν¨ν΄ 'κ°μ²΄μ§ν₯μ 4λ νΉμ±'μ κ°μ²΄μ§ν₯μ μ μ¬μ©νκΈ°μν 'λꡬ'μ΄λ€. 'κ°μ²΄μ§ν₯μ 5λ μμΉ'μ μ΄λ¬ν λꡬλ₯Ό μ¬λ°λ₯΄κ² μ¬μ©νλ μμΉμΌλ‘ λ³Ό μ μλ€. κ·Έλ λ€λ©΄ λμμΈν¨ν΄μ 무μμ λΉμ ν μ μμκΉ? 'λμμΈ ν¨ν΄'μ λ μνΌμ λΉμ ν μ μλ€. μ€μ κ°λ° νμ₯μμ λΉμ¦λμ€ μꡬ μ¬νμ μ²λ¦¬νλ©΄μ λ§λ€μ΄μ§ λ€μν ν΄κ²°μ± μ€ λ§μ μ¬λλ€μ΄ μΈμ ν 'λ² μ€νΈ νλ ν°μ€'λ₯Ό μ 리ν κ²μ΄λ€. (λμμΈ ν¨ν΄μ λΉμ°ν κ°μ²΄ μ§ν₯ νΉμ±κ³Ό μ€κ³ μμΉμ κΈ°λ°μΌλ‘ ꡬμ±) -> μ€νλ§ μμ λ€μν λμμΈ ν¨ν΄μ νμ©νκ³ μλ€! * μ€νλ§μ 곡μμ μ μ : "μλ° μν°νλΌμ΄μ¦ κ°λ°μ νΈνκ² ν΄μ£Όλ μ€νμμ€ κ²½λκΈ μ ν리μΌμ΄μ νλ μμν¬" λμμΈ ν¨ν΄μ κ°μ²΄ μ§ν₯μ νΉμ± μ€ 'μμ', 'μΈν°νμ΄μ€', 'ν©μ±'μ μ΄μ©νλ€. (ν©μ±μ κ°.. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄] 5μ₯ : κ°μ²΄ μ§ν₯ μ€κ³ 5μμΉ κ°μ²΄ μ§ν₯ μ€κ³ 5μμΉ κ°μ²΄ μ§ν₯μ κ°λ κ³Ό 4λ νΉμ± μ’μ λꡬμ μκ²λ¨. μ’μ λκ΅¬κ° μμ΄λ μ¬λ°λ₯΄κ² μ¬μ©νλ λ°©λ²μ μμμΌ μ’μ μλ¦¬κ° λμ΄. κ°μ²΄ μ§ν₯ μ€κ³ (Object Oriented Design) 5μμΉ SOLID (κ°μ²΄ μ§ν₯μ μ¬λ°λ₯΄κ² μ¬μ©νλ λ°©λ²) SRP (Single Responsibility Principle) : λ¨μΌ μ± μ μμΉ OCP (Open Closed Princinple) : κ°λ°© νμ μμΉ LSP (Liskov Substitution Principle) : 리μ€μ½ν μΉν μμΉ ISP (Interface Segregation Principle) : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ DIP (Dependency Inversion Principle) : μμ‘΄ μμ μμΉ μμ§λλ λμ΄κ³ κ²°ν©λ.. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄] 4μ₯ : μλ°κ° νμ₯ν κ°μ²΄ μ§ν₯ abstract ν€μλ - μΆμ λ©μλμ μΆμ ν΄λμ€ μΆμ λ©μλλ₯Ό νλλΌλ κ°μ§κ³ μλ ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌκ³ λΆλ₯Έλ€. λλ체 μ λͺΈμ²΄κ° μμ΄ μ μΈλ§ μλ λ©μλκ° νμν κΉ?? **λ¬Έμ μ ** 1. λλ¬Ό ν΄λμ€λ μ΄λ»κ² μΈμ΄μΌ νλμ§ λͺ¨λ₯Έλ€. (μ°λ λ©μλλ₯Ό μ μν μ μλ€.. -> μ μνλλΌλ μΈμ€ν΄μ€λ‘ μμ±ν΄μ μλλ€.) 2. κ·Έλ°λ° λλ¬Ό μ°Έμ‘° λ³μλ₯Ό ν΅ν΄ λͺ¨λ λλ¬Όμ μΈκ²νκ³ μΆλ€. (νμν΄λμ€μμ μ€λ²λΌμ΄λ ν μμ λ©μλκ° νμν¨...) **ν΄κ²° λ°©λ²** μΆμ ν΄λμ€μ μΆμ λ©μλ μ¬μ©νλ©΄ 1λ²μ λ¬Έμ λ₯Ό ν΄κ²°κ°λ₯νλ€. μ°λ λ©μλλ νμ ν΄λμ€μκ² κ΅¬νμ 맑길 μ μκ³ μΆμν΄λμ€λ μΈμ€ν΄μ€κ° λ μ μλ€. (λ¬Έμ μ λͺ¨λ ν΄κ²°!!) 2λ² λ¬Έμ λ μΆμ λ©μλλ‘ νμν΄λμ€μκ² λ©μλμ ꡬνμ κ°μ ν .. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄μ§ν₯μ μ리μ μ΄ν΄] 3μ₯ : μλ°μ κ°μ²΄ μ§ν₯ κ°μ²΄μ§ν₯μ μΈκ° μ§ν₯μ΄λ€ κ°μ²΄ μ§ν₯μ ν° κ·Έλ¦Ό μΈμμ λͺ¨λ κ²μ "κ°μ²΄"λ€. κ°κ°μ κ³ μ νλ€. μ¬λ¬Όμ μμ±μ κ°λλ€. μ¬λ¬Όμ νμλ₯Ό νλ€. μ°λ¦¬ μΈκ°μ μ¬λ¬Όμ "λΆλ₯"λ₯Ό ν΅ν΄ μ΄ν΄νκ³ μΈμ§νλ€. μ¬λμ λμ΄, λͺΈλ¬΄κ²λ₯Ό κ°μ§λ©° "λ¨Ήκ±°λ, μκ±°λ, μ°λ λ±μ νλ"μ νλ 물체λ₯Ό λ»νλ€. (κ°λ μ λ°λ₯Έ λΆλ₯) μ°λ¦¬κ° μ€μ μ¬λ¬Όμ μΈμ§νκ³ μ¬κ³ νλ λ°©μλλ‘ κ°μ²΄ λ¨μμ νλ‘κ·Έλλ°μ΄ κ°μ²΄ μ§ν₯μμ κ°λ₯νλ€. κ°μ²΄ μ§ν₯μ 4λ νΉμ± - μΊ‘! μμΆλ€ μΊ‘μν : μ 보μλ μμ : μ¬μ¬μ© μΆμν : λͺ¨λΈλ§ λ€νμ± : μ¬μ©νΈμ ν΄λμ€ vs. κ°μ²΄ = λΆμ΄λΉ΅ν vs. λΆμ΄λΉ΅ ??? λΆμ΄λΉ΅ν λΆμ΄λΉ΅ = new λΆμ΄λΉ΅ν(); //??? λΆμ΄λΉ΅νμ μλ‘μ΄ λ§λ λ€κ³ "λΆμ΄λΉ΅"μ΄ λ μ μλ€ -> λΆμ΄λΉ΅νμ κ·Έμ λΆμ΄λΉ΅μ λ§λλ ν©.. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄μ§ν₯μ μ리μ μ΄ν΄] 2μ₯ : μλ°μ μ μ°¨μ /ꡬ쑰μ νλ‘κ·Έλλ° μλ° νλ‘κ·Έλλ° κ°λ°κ³Ό ꡬλ μλ°λ μλ° κ°λ°λκ΅¬μΈ JDKλ₯Ό μ΄μ©ν΄ κ°λ°λκ³ κ°λ°λ νλ‘κ·Έλ¨μ JREμ μν΄ μ»΄ν¨ν°μ JVM μμμ ꡬλλλ€. - JDKλ μ»΄νμΌλ¬ ν¬ν¨ - JREλ μλ° μ€νκΈ° ν¬ν¨ - JVMμ μλ° κ°μ κΈ°κ³ μλ° κ°λ°μλ λ³ΈμΈμ΄ μ¬μ© μ€μΈ νλ«νΌμ μ€μΉλ JVMμ©μΌλ‘ νλ‘κ·Έλ¨μ μμ±νκ³ λ°°ν¬νλ©΄ κ° νλ«νΌμ λ§λ JVMμ΄ μμμ νλ‘κ·Έλ¨μ μ무 λ¬Έμ μμ΄ κ΅¬λμμΌμ€λ€. -> μ΄λ¬ν μλ°μ νΉμ±μ "Write Once Run Anywhere" λΌκ³ νλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬ μ¬μ© λ°©μ νλ‘κ·Έλ¨ μ€νμ λ°λ₯Έ T λ©λͺ¨λ¦¬ ꡬ쑰 λ³ν Tλ©λͺ¨λ¦¬ ꡬ쑰λ μ€νν± μμ, μ€ν μμ, ν μμμΌλ‘ λλ μ μλ€. μ€ν μ½λ public class Start { public static void.. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄μ§ν₯μ μ리μ μ΄ν΄] 1μ₯ : μ¬λμ μ¬λν κΈ°μ μ€νλ§μ κ°μ²΄μ§ν₯μ κΈ°λ° μμμ λ§λ€μ΄μ‘λ€. λ°λΌμ, κ°μ²΄μ§ν₯μ λν μ΄ν΄λ μ€νλ§ νλ μμν¬λ₯Ό μ΄ν΄νκΈ° μν νμ 쑰건μ΄λ€. μ€νλ§μ κ°μ²΄μ§ν₯μ κΈ°λ° μμ μμλ€. OOP - μλ°, C++, C# [κ°λ , μ ν] ???? - μ€νλ§ ⇒ ????μλ 무μμ΄ λ€μ΄κ°κΉ? μ€νλ§ νλ μμν¬ κ°λ λ°©λν μ ν κΈμ΄μ΄κ° μκ°νλ μ€νλ§ νλ μμν¬μ κ°λ μ → OOP νλ μμν¬ λ°λΌμ, μ€νλ§μ μλ €λ©΄ κ°μ²΄μ§ν₯μ μ΄ν΄ν΄μΌλ§ νλ€. λ, νλ μμν¬κ° 무μμΈμ§ μ΄ν΄ν΄μΌ νλ€. μ€νλ§μ΄ μ΄λ €μ΄ μ΄μ ? OOPλ₯Ό μ λͺ¨λ₯΄κ±°λ μ€ν΄νκ³ μλ κ²½μ° μ€νλ§ μΌκ°ν : IoC/DI, AOP, PSA (μ€νλ§μ μ§λ°°νλ 3μμ) μ€νλ§ μΌκ°νμ POJOμ 3κ°μ§ μ νμ μ§λμ μ€μΌλ‘μ¨ κ±°λν νλ μμν¬λ₯Ό μμ±ν¨! → 7μ₯ νμ΅ μ€ν.. [μλ° μ½λ©μ κΈ°μ ] 8μ₯ : λ°μ΄ν° νλ¦ 8μ₯μμλ μλ° ν¨μν νλ‘κ·Έλ¨μ ν΅μ¬ κ°λ μ μ€λͺ νκ² λ€. - ν¨μν λ°©μμ΄ λͺ λ Ήν λ°©μμ μλ±ν λ₯κ°νλ κ²½μ°. - μ΅λͺ ν΄λμ€λ₯Ό λͺ μΎνκ² λ체νλ λ°©λ² - μλ£ κ΅¬μ‘°λ₯Ό λ ν¨μ¨μ μΌλ‘ μννλ λ°©λ² - μ΅μ λλ‘ νλ‘κ·Έλ¨μ λ μ·¨μ½νκ² λ§λλ λ°©λ² 8.1 μ΅λͺ ν΄λμ€ λμ λλ€ μ¬μ©νκΈ° λ¬Έμ μ½λ class Calculator { Map values = new HashMap(); Double square(Double x) { Function squareFunction = new Function() { @Override public Double apply(Double value) { return value * value; } }; return values.computeIfAbsent(x, squareFun.. [μλ° μ½λ©μ κΈ°μ ] 7μ₯ : κ°μ²΄ λμμΈ μλ°μ ν΄λμ€μ κ°μ²΄λ₯Ό μ¬λ°λ₯΄κ² κΈ°λ₯λ§ λμνκ² νλ κ²μ λΆμ‘±νλ€! 보기 μ’μμΌ νκ³ μ¬μ©νκΈ°λ νΈν΄μΌλ§ νλ€!! 7μ₯μμλ λ κ°μ²΄ μ§ν₯μ μ΄κ³ κ°λ ₯ν μ½λλ₯Ό λ§λλλ° μ μ©νκ² μ°μΌ μλ°μ 보νΈμ μΈ λμμΈ μ리λ₯Ό κ°μ‘°νκ² λ€. 7.1 λΆ λ§€κ°λ³μλ‘ λ©μλ λΆν λ¬Έμ μ½λ void log(String message, boolean classified) throws IOException { if (classified) { writeMessage(message, CAPTAIN_LOG); } else { writeMessage(message, CREW_LOG); } } μ μ½λλ booleanμ μνμ λ°λΌ μλ‘ λ€λ₯Έ μμ μ μννλ€. μ΄λ λμμ λ¬Έμ κ° μμ§λ§ μ½κΈ° λΆνΈνκ³ λ©μλλ₯Ό μ¬μ©νλ μ¬λμ΄ Trueμ.. μ΄μ 1 2 3 4 5 λ€μ