μ§λ ν¬μ€ν μμλ 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λ κ°λ°μκ° μ§μ μ½λ©μ νμ¬ κ°μ²΄λ₯Ό μμ±νλ κ²μ΄ μλλΌ, 컨ν μ΄λκ° μ΄λ₯Ό μμ±μμΌ μ£Όλ κ²μ λλ€. κ·Έλ κ² λλ€λ©΄ μ½λμμ μ§μ μ μΈ μ°κ΄ κ΄κ³κ° λ°μνμ§ μμ κ° ν΄λμ€λ€μ λ³κ²½μ΄ μμ λ‘μ μ§λλ€...