2000λ λ μ΄λ°, μλ° κ°λ°μλ€μ EJBλΌλ μλ² μ»΄ν¬λνΈ λͺ¨λΈμ μ¬μ©νλ€.
μ μ°ν¨μ μ°Ύμ보기 νλ μ ννλ μ ν리μΌμ΄μ μΌλ‘, μλ° κ°λ°μλ€μ κ°μ²΄ μ§ν₯ μΈμ΄λ₯Ό μ¬μ©ν¨μλ κ°μ²΄ μ§ν₯μ μΈ μλ² κ°λ°μ μ΄μ΄λκ°λ κ²μ΄ μ½μ§ μμκ³ μ¬μ§μ΄ λλ Έλ€.
κ·Έλ¬λ λ¬΄λ ΅, μ΄μ λΆλ§μ κ°μ§ λͺ κ°λ°μμ λ Έλ ₯μΌλ‘ λλμ΄ 'μ€νλ§'μ΄ μΈμμ λμ¨λ€. νμ¬λ μ€νλ§κ³Ό ν¨κ» JPA, νμ΄λ²λ€μ΄νΈκ° λ§μ΄ μ¬μ©λκ³ μλ€.
μ€νλ§ λΆνΈλ, μ€νλ§μ νΈνκ² μ¬μ©ν μ μλλ‘ μ¬λ¬ κ°μ§ μ΄κΈ° μΈν κ³Ό κ΄λ¦¬λ₯Ό λμμ£Όλ λꡬμ΄λ€.
starter μ’ μμ±μ μ 곡νκ±°λ μλνν° λΌμ΄λΈλ¬λ¦¬ μ€ μνλ κ²μ κ³ λ₯΄λ©΄ μ΄κ²λ€μ΄ ν¬ν¨λ μ νλ‘μ νΈλ₯Ό μμ±ν΄μ€λ€.
κ²λ€κ° Tomcat κ°μ λ΄μ₯ μΉ μλ²λ κ°μ§κ³ μμ΄ λ³λλ‘ μΉ μλ²μ μ¬λ¦΄ νμκ° μλ€.
νλ‘κ·Έλλ°μ λͺ λ Ήμ΄μ λμ΄μ΄λΌ μκ°νμ§ μκ³ ‘κ°μ²΄’μ λ¬Άμμ΄λΌκ³ μκ°νκ³ κ°μ²΄λ€μ λ 립μ μ΄κ³ , λλ‘λ μ’ μμ μΈ μνΈμμ©μ ν΅ν΄ νλ‘κ·Έλ¨μ ꡬμ±νλ κ²μ λͺ©νλ‘ νλ€.
κ° κ°μ²΄λ€μ μ μ°νκ³ λ³κ²½μ΄ μ½λλ‘ λ§λλ κ²μ΄ μ₯μ μ΄λ©°, μ΄λ¬ν μ΄μ λ‘ λκ·λͺ¨ νλ‘μ νΈμ λ§μ΄ νμ©λλ€.
κ°μ²΄ μ§ν₯ μΈμ΄μ κ°μ₯ ν° νΉμ₯μ μΈ 'λ€νμ±'λ λΉΌλμ μ μλ€.
κ°μ²΄λ₯Ό μ€κ³ν λ λΆλͺ¨κ²©μΈ μΈν°νμ΄μ€λ₯Ό λ¨Όμ μ€κ³νκ³ , μΈν°νμ΄μ€μ νΉμ±μ κ°κ³ μλ ꡬν κ°μ²΄(ν΄λμ€)λ₯Ό ν΅ν΄ λΉμ·νμ§λ§ λ€λ₯Έ μ¬λ¬ κ°μ§ νμ§μ κ°μ²΄λ₯Ό μμ±ν μ μλ€λ μ μ΄ νΉμ§μ΄λ€.
κ°μμμλ λ€νμ±μ νμ©ν μ½λλ₯Ό μκ°νλ€. μ€λͺ μ μν΄ κ°μ μλ£λ₯Ό 첨λΆνλ€.
μ¬κΈ°μμ μ£Όλͺ©ν΄μΌ ν λΆλΆμ νμ μ μ₯μμ ν μΈ μ μ± μ΄λ€. 'νμ μ μ₯μ μν 'κ³Ό 'ν μΈ μ μ± μν (DiscountPolicy)'μ μΈν°νμ΄μ€λ‘, νμμ μ μ₯μμ μ μ± μ ꡬν ν΄λμ€λ‘ λ§λ€μ΄μ Έ μλ€.
μ΄λ μ μ₯μμ μ μ± μ μν λλ§λ€ λ³κ²½νκ³ , λμμ μ μ μμ μΌλ‘ μ λ§ νμν κ³³μλ§ λ³κ²½μ μ μ£Όλ κ²μ΄ λͺ©νλ€.
μ°λ¦¬κ° μ§κΈκΉμ§ μμ±νλ μ½λμ λͺ¨μ΅μ μλμ κ°λ€.
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
μ΄ μ½λ μμ²΄κ° λ¬Έμ κ° λμ§λ μμ§λ§, μ΄ μ½λκ° ν΄λΌμ΄μΈνΈλ¨μμ μ€νλλ€λ©΄ λ¬Έμ κ° λ°μνλ€.(OCP μλ°)
μ°λ¦¬λ μλ²μμμ λ³κ²½μ μ ν΄λΌμ΄μΈνΈ λͺ¨λ₯΄κ² μ μ©νλ κ±Έ λͺ©νλ‘ νλλ°, μ΄ μ½λκ° ν΄λΌμ΄μΈνΈμ μλ κ±°λ€.
ν΄λΌμ΄μΈνΈ μ μ₯μμλ ν μΈ μ μ± μ΄ μ΄λ€ κ²μ΄λ μκ΄μμ΄ 'ν΄λΌμ΄μΈνΈκ° μνλ ν μΈμ΄ μ μ©λλ©΄ λλλ°', μ΄λ κ² λλ©΄ ν΄λΌμ΄μΈνΈκ° μ§μ μ μ‘ ν μΈ μ μ± μ μ¬μ©ν 건μ§, μ λ₯ ν μΈ μ μ± μ μ¬μ©ν κ±΄μ§ μ νλ κΌ΄μ΄ λλ λ§μ΄λ€.
'λ μ λ₯ ν μΈ μ μ‘ ν μΈ κ·Έκ² λμ§ λͺ¨λ₯΄κ² κ³ 10% ν μΈν΄λ¬λΌκ³ ~'
λ¬Έμ κ° νλ λ μλ€. μ΄κ² λ νμ€ν λ¬Έμ λ€.
μΈν°νμ΄μ€ DiscountPolicyμ μ΄λ₯Ό ꡬνν ꡬν ν΄λμ€ FixDiscountPolicyκ° μ‘΄μ¬νλ€λ μ μ΄λ€. μκΉ λ΄€λ SOLID μμΉ μ€ DIPλ₯Ό μλ°ν κ²μ΄λ€. κ·ΈλΌ κ²°κ΅ μλμ κ°μ μ½λλ₯Ό ꡬννλΌλ 건κ°?
private DiscountPolicy discountPolicy;
λΉμ·νλ€. κ·Όλ°, κ·ΈλΌ μ΄λ€ ν μΈ μ μ± μ μ¬μ©νλμ§λ μΈμ μκ² λμ§?
μμ±μλ₯Ό ν΅ν΄ μμ‘΄μ±μ μ£Όμ νλ μμ μ΄ μ΄λ μΌμ΄λλ€. μ΄λ₯Ό DI(Dependency Injection)μ΄λΌκ³ νλ€.
κ·Έλ¦¬κ³ μ΄λ¬ν μμ μ ν΄λΌμ΄μΈνΈμμ λ 립μν€κΈ° μν΄ AppConfig νμΌμ λ§λ€μ΄ μ ν리μΌμ΄μ μ μ 체 λμ λ°©μμ ꡬμ±νλλ‘ νλ€. μ΄λ₯Ό κΈ°λ°μΌλ‘
1) μμ±μλ₯Ό ν΅ν μμ‘΄μ± μ£Όμ
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
2) AppConfig νμΌ λ΄μμ ν΄λΌμ΄μΈνΈ μ€ννλ©° μνλ ν΄λμ€λ₯Ό μμ±μ νλΌλ―Έν°λ‘ μ½μ
public OrderService orderService() {
return new OrderServiceImpl(new FixDiscountPolicy());
}
3) μ€ν λ° ν μ€νΈ μμ AppConfigλ₯Ό μ μΈνμ¬ κ·Έ μμ orderService νΈμΆ
AppConfig appConfig = new AppConfig();
OrderService orderService = appConfig.orderService();
μ΄λ κ² μ€νν΄μ£Όλ©΄ OCP, DIP μλ° μμκ° μ κ±°λλ€.
ν΄λΉ ν¬μ€νΈλ μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ κ°μ λ΄μ©μ μ°Έκ³ νμμ΅λλ€.
[μ€νλ§ 1] 3μ₯.μ€νλ§ DI (0) | 2022.10.27 |
---|---|
[μ€νλ§ 1] 2μ₯.μ€νλ§ μμνκΈ° (0) | 2022.10.27 |
[μ€νλ§1] λΉ μλͺ μ£ΌκΈ° μ½λ°±, λΉ μ€μ½ν (0) | 2022.10.21 |
[μ€νλ§1] μ»΄ν¬λνΈ μ€μΊ, μμ‘΄κ΄κ³ μλ μ£Όμ (0) | 2022.10.13 |
[μ€νλ§ 1] AppConfig, μ€νλ§ μ»¨ν μ΄λ, μ±κΈν€ (0) | 2022.10.06 |