- λ§€κ°λ³μλΏ μλλΌ λ°νκ°, λ³μ, νλλ₯Ό μ λΆ μΈν°νμ΄μ€ νμ μΌλ‘ μ μΈνλΌ.
- μ ν©ν μΈν°νμ΄μ€κ° μλ€λ©΄ ν΄λμ€μ κ³μΈ΅κ΅¬μ‘° μ€ κ°μ₯ μμμ ν΄λμ€λ₯Ό μ¬μ©νλΌ.
// μ’μ μμ
Set<Son> sonSet = new LinkedHashSet<>();
// λμ μμ
LinkedHashSet<Son> sonSet = new LinkedHashSet<>();- SOLID μμΉ μ€ λ¦¬μ€μ½ν μΉν λ²μΉμ΄ λ μ¬λλ€.
- Spring μ DI(Dependency Injection) κ° λ μ¬λλ€.
ν λΉμ μ€νλ§, κΉμνλμ μ€νλ§ κ°μλ₯Ό μκ°νλ©΄μ μ 리ν λ΄μ©μ @kses1010 λμ΄ μμ±
- AppConfigκ° λ±μ₯ ν ꡬν κ°μ²΄λ μμ μ λ‘μ§μ μ€ννλ μν λ§ νλ€. νλ‘κ·Έλ¨μ μ μ΄ νλ¦μ AppConfigκ° λ΄λΉνλ€. β orderServiceImplμ νμν μΈν°νμ΄μ€λ€μ νΈμΆνμ§λ§ μ΄λ€ ꡬν κ°μ²΄λ€μ΄ μ€νλ μ§ λͺ¨λ¦.
- νλ‘κ·Έλ¨μ μ μ΄ νλ¦μ μ§μ μ μ΄νλ κ²μ΄ μλλΌ μΈλΆμμ κ΄λ¦¬νλ κ² β μ μ΄μ μμ (IoC)
- νλ μμν¬: λ΄κ° μμ±ν μ½λλ₯Ό μ μ΄, λμ μ€ννλ©΄ νλ μμν¬(JUnit)
- λΌμ΄λΈλ¬λ¦¬: λ΄κ° μμ±ν μ½λκ° μ§μ μ μ νλ¦μ λ΄λΉ. (κ°μ²΄ β JSONμΌλ‘ λ°κΎΈκΈ°)
- μΈν°νμ΄μ€μ μμ‘΄νκΈ° λλ¬Έμ μ€μ μ΄λ€ ꡬν κ°μ²΄κ° μ¬μ©λ μ§λ λͺ¨λ₯Έλ€.
- μμ‘΄κ΄κ³λ μ μ μΈ ν΄λμ€ μμ‘΄ κ΄κ³μ μ€ν μμ μ κ²°μ λλ λμ μΈ κ°μ²΄(μΈμ€ν΄μ€) μμ‘΄ κ΄κ³ λμ λΆλ¦¬ν΄μ μκ°ν΄μΌ νλ€.
import μ½λλ§ λ³΄κ³ μμ‘΄κ΄κ³λ₯Ό μ½κ² νλ¨ν μ μλ€.
β μ μ μΈ μμ‘΄κ΄κ³λ μ ν리μΌμ΄μ
μ μ€ννμ§ μμλ λΆμν μ μλ€.

public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
// κ³ μ ν μΈ μ μ±
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
// OrderServiceImpl.class
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}μ΄μ μ¬κΈ°μ OrderSeviceImplμμ κ³ μ ν μΈ μ μ± μ΄ μλ ν μΈμ¨ μ μ± μΌλ‘ λ³κ²½ν κ²½μ°
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}λ‘λ§ λ°κΎΈλ©΄ λ©λλ€. μλΉμ€ λ‘μ§μΈ OrderServiceImplμμ λ°κΏ νμκ° μκ² μ£ ? μ΄κ±΄ μλ°λ‘μ§μ΄κ³ μ¬κΈ°μ λ§μ½ μ€νλ§μΌλ‘ μ ννλ€λ©΄
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}λ‘ μ λν μ΄μ μΌλ‘ λ±λ‘μ΄ κ°λ₯ν©λλ€. κΉμνλ κ°μμμλ xmlμμ μ λν μ΄μ μΌλ‘ λ°κΎΈλ μΆμΈλΌκ³ νμ ¨κ³ , xmlμ μ΄λ€κ³ νλ©΄ μλ§ λ κ±°μμͺ½μ΄ λ§μ΄ μΈ λ―νλ€μ. IoCλ μ μ΄μ μμ μ΄λ©°, DIλ μ€νλ§ νλ μμν¬μμ μ§μνλ IoCμ ννλΌκ³ μκ°νμλ©΄ λ©λλ€. μμΈν건 μΈνλ°μ κΉμνλ κ°μ λλ ν λΉμ μ€νλ§μ μΆμ²ν©λλ€!