πμ½μ μ± μ 리/μλ° κ°μ²΄μ§ν₯ μ리μ μ΄ν΄ (7) μΈλ€μΌν 리μ€νΈν [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄] 7μ₯ : μ€νλ§ μΌκ°νκ³Ό μ€μ μ 보 μ€νλ§μ μ΄ν΄νλ €λ©΄ POJOλ₯Ό κΈ°λ°μΌλ‘ μ€νλ§ μΌκ°νμ΄λΌλ μ μΉμ κ°μ§ IoC/DI, AOP, PSAλΌκ³ νλ μ€νλ§μ 3λ νλ‘κ·Έλλ° λͺ¨λΈμ λν΄ μ΄ν΄κ° νμλ€. μ€νλ§ μΌκ°νμ μ΄ν΄νλ©΄ κ·Έ μ‘°ν©μΌλ‘ μ΄λ£¨μ΄μ§ μλ§μ 볡μ‘ν λΆκ° νλ μμν¬λ₯Ό μ΄ν΄ν μ μλ€. μ€νλ§ μΌκ°νμ λν΄μ νλ² μμ보μ. IoC/DI - μ μ΄μ μμ /μμ‘΄μ± μ£Όμ νλ‘κ·Έλλ°μμ μμ‘΄μ±μ΄λ 무μμΌκΉ? ex) μ΄μ μκ° μλμ°¨λ₯Ό μμ°νλ€. -> μλμ°¨κ° λ΄λΆμ μΌλ‘ νμ΄μ΄λ₯Ό μμ°νλ€. (μ΄μ μ -> μλμ°¨ -> νμ΄μ΄) μμ‘΄ -> μ 체(μμ‘΄νλ κ°μ²΄)κ° λΆλΆ(μμ‘΄λλ κ°μ²΄)μ μμ‘΄νλ€. μ§ν©(Aggregation) κ΄κ³: λΆλΆμ΄ μ 체μ λ€λ₯Έ μλͺ μ£ΌκΈ°λ₯Ό κ°μ§ μ μλ€. ꡬμ±(Compostion) κ΄κ³: λΆλΆμ μ 체μ κ°μ μλͺ μ£ΌκΈ°λ₯Ό .. [μ€νλ§ μ λ¬Έμ μν μλ° κ°μ²΄ μ§ν₯μ μ리μ μ΄ν΄] 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μ₯ νμ΅ μ€ν.. μ΄μ 1 λ€μ