μ§λ ν¬μ€ν μμλ OCPμ DIPκ° μλ°° λλ κ²½μ°μ λν΄μ μμ보μμ΅λλ€. μ΄λ²μλ μ€νλ§μ΄ μλ μμ μλ°λ‘ ν΄κ²°ν΄λ³΄κ² μ΅λλ€. μ κΉ μ§λ κΈμ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μ΄ν΄λ³΄κ² μ΅λλ€. public class DriverImpl implements Driver{ Car car = new K3(); Engine engine = new Electronic(); @Override public void findOwnCarDetail() { car.findCarName(); car.findCarBrand(); engine.WayToMove(); } } DriverImpl μν μ ꡬνμ²΄κ° μ§μ new ν€μλλ‘ μ μΈ λμ΄ μμ΅λλ€. μ΄λ΄ κ²½μ° μΌν보면 OCPμ DIPλ₯Ό μ μ§ν¨ κ² κ°μ§λ§ μ¬μ€ μλλΌκ³ μ§λ ν¬μ€ν μμ ..
λ°λκ³Ό μ€μ²λΌ μλ°νλ©΄ λ°λ‘ λ μ€λ₯΄λ κ²μ΄ μμ΅λλ€. λ°λ‘ "κ°μ²΄ μ§ν₯ μΈμ΄" λΌλ κ²μ λλ€. "κ°μ²΄ μ§ν₯"μ΄λ λ κ³ λΌκ³ μκ°ν μ μμ΅λλ€. λ κ³ λΈλ‘λ€μ 쑰립νμ¬ μ°λ¦¬λ 무μμ΄λ λ§λ€ μ μμ΅λλ€. λ κ³ λ₯Ό μ΄μ©ν΄μ λλ¬Όμμ λ§λ€μλ€κ³ μκ°ν΄λ³΄κ² μ΅λλ€. λλ¬Όμμλ λ κ³ λ‘ λ§λ€μ΄μ§ μ¬μλ μκ³ , νΈλμ΄λ μκ³ , μ½λΌλ¦¬λ μκ³ , μ κ° μ’μνλ νλ€λ μμ΅λλ€. νμ§λ§ μ¬νκ²λ λ μ΄μ νΈλμ΄κ° μΈκΈ°κ° μμ΄μ κ³ λ¦΄λΌ λ κ³ λ‘ λ°κΎΈκ³ μΆμ΅λλ€. μ΄λ΄ κ²½μ° μ°λ¦¬λ μ½κ² λλ¬Όμμμ νΈλμ΄ λ κ³ λ₯Ό λΉΌκ³ κ³ λ¦΄λΌ λ κ³ λ₯Ό λ£μ΄μ£Όλ©΄ λ©λλ€. μ¬κΈ°μ νΈλμ΄, κ³ λ¦΄λΌκ° κ°μ²΄κ° λλ κ²μ λλ€. νΈλμ΄λ₯Ό λΊ λ€κ³ ν΄μ κΈ°μ‘΄μ μλ μ¬μλ νλ€ λ κ³ λ μ ν μν₯μ΄ μμ΅λλ€. λ§μ½ λΌμ΄κ±° λ κ³ λ₯Ό λ§λ€κ³ μΆλ€κ³ , νΈλμ΄μ μ¬μλ₯Ό λ§κ΅¬μ‘..
μ€νλ§μ νΉμ§μ 5κ°μ§λ‘ λλλ€λ©΄ λ€μκ³Ό κ°μ΄ λλ μ μμ΅λλ€. κ²½λ 컨ν μ΄λ DI(Dependency Injection, μμ‘΄μ± μ£Όμ ) IoC(μ μ΄μ μνλ¦, Inversion of Control) AOP(κ΄μ μ§ν₯νλ‘κ·Έλλ°, Aspect oriented Programming) POJO λ°©μμ νλ μμν¬ κ·Έ μ€ μ΄λ² κΈμμλ AOP(κ΄μ μ§ν₯νλ‘κ·Έλλ°)μ λν΄ μμλ³΄λ €κ³ ν©λλ€. l AOPλ μ νμν κΉ? μΉ μ ν리μΌμ΄μ μ λ§λ€λ€ 보면 ν΄νΉμ λλΉνκΈ° μν 보μ κΈ°λ₯, μ¬μ©μμ μ μ λ΄μμ μν λ‘κΉ κΈ°λ₯ κ·ΈμΈμ νΈλμμ , μ΄λ©μΌ λ°μ‘ κΈ°λ₯ λ± μλ§μ κΈ°λ₯λ€μ΄ μμ΅λλ€. μ΄λ€μ 곡ν΅μ μ 무μμΌκΉμ? λͺ¨λ μΉ μ ν리μΌμ΄μ μ ꡬμΆν λ 곡ν΅μ μΌλ‘ νμν κΈ°λ₯λ€ μ λλ€. κ·Έλ¦¬κ³ λλΆλΆμ ν΄λμ€λ€μ΄ μ΄λ¬ν κΈ°λ₯..
μλμ°¨μμ λ§μ½ μμ§μ΄ μ€λλμ μμ§μ λ°κΎΈκ³ μΆλ€λ©΄, μλμ μ μ²΄κ° μλ μμ§λ§ λ½μμ λ°κΏμ£Όλ©΄ λ©λλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμλ ν΄λμ€μ λν λ³κ²½μ΄ νμνλ©΄ λ€λ₯Έ ν΄λμ€μ μν₯μ λΌμΉμ§ μμΌλ©΄μ λ³κ²½μ΄ κ°λ₯ν΄μΌ ν©λλ€. μ΄λ¬ν μν©μ λ μμνκ² λ³κ²½μ΄ κ°λ₯μΌ λμμ€μ μλλ‘ λμ λ κΈ°λ₯μ΄ λ°λ‘ DI(Dependency Injection)μ IoC(Inversion of Control)μ λλ€. μλ°λ‘ νλ‘κ·Έλλ°μ νλ©΄μ κ°μ²΄λ₯Ό μμ±ν λ μ§μ ν΄λμ€μ new μ°μ°μλ₯Ό μ΄μ©νμ¬ μμ±νμ΅λλ€. νμ§λ§ DIλ κ°λ°μκ° μ§μ μ½λ©μ νμ¬ κ°μ²΄λ₯Ό μμ±νλ κ²μ΄ μλλΌ, 컨ν μ΄λκ° μ΄λ₯Ό μμ±μμΌ μ£Όλ κ²μ λλ€. κ·Έλ κ² λλ€λ©΄ μ½λμμ μ§μ μ μΈ μ°κ΄ κ΄κ³κ° λ°μνμ§ μμ κ° ν΄λμ€λ€μ λ³κ²½μ΄ μμ λ‘μ μ§λλ€...