2021. 9. 30. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋์ ๋๋ค.
์ฃผ๋ํ๋์ ์์์ ์ฃผ๋ฌธ, ํ์, ํ ์ธ(๊ณ ์ ํ ์ธ)์ ๋ํด์ ์์ ์๋ฐ๋ง์ ํ์ฉํด ์ด์ฌํ ๊ณต๋ถ๋ฅผ ํ๋ ๊ฒ์ด์์.
์ด๋ฒ์๋ 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์ด๋ผ๋ ๊ณต์ฐ์ ๊ธฐํ์๋ก ์๊ฐํ๋ฉด ์ฌ์ด ๊ฒ์ด์์. ๊ณต์ฐ ๊ธฐํ์๋ ๊ณต์ฐ ์ฐธ์ฌ์์ธ ๊ตฌํ ๊ฐ์ฒด๋ค์ ๋ชจ๋ ์์์ผ ํ๋ ๊ฒ ๋น์ฐํ๋ต๋๋ค!
์ถ์ฒ : ์ธํ๋ฐ - ๊น์ํ ๊ฐ์ฌ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ฐ์
์ด ๊ธ์ ๊ฐ์ ๋ด์ฉ๊ณผ ๊ฐ์ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก '์ฃผ๋ํ๋'์ด '์ฃผ๋ํ๋' ์ดํดํ๊ธฐ ์ฝ๊ธฐ ์ํด ์์ฑํ ๋ด์ฉ ์์ ์๋ ค๋๋ฆฝ๋๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ช ๋ก์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค.
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ (0) | 2021.10.03 |
---|---|
[Spring] Ioc, DI Container (0) | 2021.10.01 |
[Spring] ๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์๋ก์ด ํ ์ธ ์ ์ฑ ๊ฐ๋ฐ (0) | 2021.09.29 |
[Spring] OCP์ DIP ๊ณ ๋ คํ๊ธฐ (4) | 2021.09.18 |
[Spring] ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง (0) | 2021.09.12 |