[Spring] AppConfig 리ν©ν°λ§
μλ νμΈμ? μ£Όλνλμ λλ€.
μ£Όλνλμ μμμ μ£Όλ¬Έ, νμ, ν μΈ(κ³ μ ν μΈ)μ λν΄μ μμ μλ°λ§μ νμ©ν΄ μ΄μ¬ν 곡λΆλ₯Ό νλ κ²μ΄μμ.
μ΄λ²μλ AppCofing.javaλ₯Ό 리ν©ν°λ§ νλ λ²μ λν΄μ μλ €μ£Όμ ¨μ΄μ!
ν¨κ» κ³΅λΆ ν΄ λ³΄μ€κ²μ!
π λͺ©μ°¨
01. [Spring] μ€νλ§ ν΅μ¬ μ리
02. [Spring] μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ (SOLID)
03. [Spring] κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§
04. [Spring] OCPμ DIP κ³ λ €νκΈ°
05. [Spring] κ°μ²΄ μ§ν₯ μ리 μ μ© - μλ‘μ΄ ν μΈ μ μ±
κ°λ°
06. [Spring] AppConfig 리ν©ν°λ§
07. [Spring] Ioc, DI Container
08. [Spring] μ€νλ§ μ»¨ν
μ΄λ μμ±
09. [Spring] μ±κΈν€ 컨ν
μ΄λ
10. [Spring] Component Scan And Auto wired Start
11. [Spring] μμ‘΄κ΄κ³ μ£Όμ
λ°©λ²
12. [Spring] Bean Life Cycle Call Back
13. [Spring] Bean Scope
π AppConfig 리ν©ν°λ§
μ°λ¦¬κ° μμμ μμ±ν AppConfigλ νμ¬ μ€λ³΅μ΄ μλ μνμ΄κ³ , μν μ λ°λ₯Έ ꡬνμ΄ μ 보μ΄μ§ μλ κ²μ΄μμ.
π κΈ°λνλ κ·Έλ¦Ό
π 리ν©ν°λ§ μ
package hello.core;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(
new MemoryMemberRepository(),
new FixDiscountPolicy());
}
}
π 리ν©ν°λ§ ν
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(
memberRepository(),
discountPolicy());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
μμ 리ν©ν°λ§ μ μ μ½λμμ μ€λ³΅μ μ κ±°νκ³ , μν μ λ°λ₯Έ ꡬνμ΄ μ 보μΌμ μλλ‘ μμ ν κ²μ΄μμ.
'new MemoryMemberRepository()' μ΄ λΆλΆμ μ€λ³΅μ΄ μ κ±°λ κ²μ΄μμ. μ΄μ 'MemoryMemberRepository'λ₯Ό λ€λ₯Έ ꡬνμ²΄λ‘ λ³κ²½ν λ ν λΆλΆλ§ λ³κ²½νλ©΄ λλ κ²μ΄μμ.
'AppConfig'λ₯Ό 보면 μν κ³Ό ꡬν Classκ° ν λμ λ€μ΄μ€λ κ²μ΄μμ. Application μ 체 ꡬμ±μ΄ μ΄λ»κ² λμ΄μλμ§ ν λμ νμ μ΄ κ°λ₯νλ΅λλ€!
π μλ‘μ΄ κ΅¬μ‘°μ ν μΈ μ μ± μ μ©
μ°λ¦¬λ λ€μ κ³ μ ν μΈ μ μ± μ μ λ₯ ν μΈ μ μ± μΌλ‘ λ³κ²½νλλ°, μ§μ€ ν΄ λ³΄λλ‘ νλ κ²μ΄μμ.
FixDicountPolicy.javaμμ RateDiscountPolicy.javaκ° μ¬μ©λ μ μλλ‘ ν κ²μ΄μμ.
AppConfigμ λ±μ₯μΌλ‘ Applicationμ΄ ν¬κ² μ¬μ© μμκ³Ό κ°μ²΄λ₯Ό μμ±νκ³ , ꡬμ±(Configuration)νλ μμμΌλ‘ λΆλ¦¬λ κ²μ΄μμ.
π μ¬μ©, ꡬμ±μ λΆλ¦¬
π ν μΈ μ μ± μ λ³κ²½
'FixDiscountPolicy' -> 'RateDiscountPolicy'λ‘ λ³κ²½ν΄λ κ΅¬μ± μμλ§ μν₯μ λ°λ κ²μ΄κ³ , μ¬μ© μμμ μ ν μν₯μ λ°κ³ μμ§ μμ κ²μ΄μμ.
π ν μΈ μ μ± λ³κ²½ κ΅¬μ± μ½λ - AppConfig
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(
memberRepository(),
discountPolicy());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
'AppConfig'μμ ν μΈ μ μ± μν μ λ΄λΉνλ ꡬνμ 'FixDiscountPolicy'μμ 'RateDiscountPolicy' κ°μ²΄λ‘ λ³κ²½ν κ²μ΄μμ.
μ΄μ ν μΈ μ μ± μ λ³κ²½ν΄λ, Application κ΅¬μ± μν λ΄λΉμΈ AppConfigλ§ λ³κ²½νλ©΄ λλ κ²μ΄μμ.
λ°λΌμ Client CodμΈ 'OrderServiceImpl'λ₯Ό ν¬ν¨ν΄μ μ¬μ© μμμ μ΄λ€ Codeλ λ³κ²½ν νμκ° μλ κ²μ΄μμ.
λ€λ§, κ΅¬μ± μμμ λΉμ°ν λ³κ²½λλ κ²μ΄μμ. κ΅¬μ± μν μ λ΄λΉνλ AppConfigλ₯Ό Applicationμ΄λΌλ 곡μ°μ κΈ°νμλ‘ μκ°νλ©΄ μ¬μ΄ κ²μ΄μμ. κ³΅μ° κΈ°νμλ κ³΅μ° μ°Έμ¬μμΈ κ΅¬ν κ°μ²΄λ€μ λͺ¨λ μμμΌ νλ κ² λΉμ°νλ΅λλ€!
μΆμ² : μΈνλ° - κΉμν κ°μ¬λμ μ€νλ§ ν΅μ¬ μ리 κ°μ
μ΄ κΈμ κ°μ λ΄μ©κ³Ό κ°μ μλ£λ₯Ό λ°νμΌλ‘ 'μ£Όλνλ'μ΄ 'μ£Όλνλ' μ΄ν΄νκΈ° μ½κΈ° μν΄ μμ±ν λ΄μ© μμ μλ €λ립λλ€.
μ£Όλνλμ κΈμ΄ λ§μμ λμ ¨λμ? ꡬλ κ³Ό 곡κ°! κ·Έλ¦¬κ³ , λκΈ κ·Έλ¦¬κ³ λ°©λͺ λ‘μ μ£Όλνλμκ² λ§μ νμ΄ λ©λλ€.