์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋น์ค์ ํ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์์กด๊ด๊ณ๋ฅผ ๋งบ๋๋ค๊ณ ํํ
- @Controller ์ด๋ ธํ ์ด์ ์ด ์๋ค๋ฉด, ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ฉฐ ๊ทธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค
- @Autowired ์ด๋ ธํ ์ด์ ์ ์์ฑ์์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ์์ฑ์์ ํ๋ผ๋ฏธํฐ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ค, DI !
(์์ฑ์๊ฐ 1๊ฐ๋ง ์๋ค๋ฉด ์๋ต๊ฐ๋ฅ)
~ @Component ์ด๋ ธํ ์ด์ ์ด ์๋ ํด๋์ค๋ ์คํ๋ง ๊ตฌ๋ ์ ๊ฐ์ฒด ์์ฑ ํ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ค
(@Controller, @Service, @Repository)
** ์๋ฌด ํด๋์ค์์ @Component๋ฅผ ๋ถ์ฌ๋ ๋๋?
-> ์ดํ๋ฆฌ์ผ์ด์ ์ด ๊ตฌ๋๋๋ ํจํค์ง ์์ ์์ง ์์ ํด๋์ค๋ @Component๋ฅผ ๋ถ์ฌ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋์ง ์๋๋ค
(@SpringBootApplication ์์ @ComponentScan ์ด๋ ธํ ์ด์ ์ด ๋ถ์ด์์)
cf) ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ Bean์ ์ฑ๊ธํค ํจํด์ด๋ค(๋์์ 1๊ฐ๋ง ๋ฑ๋กํ ์ ์๋ค) -> ํ ๊ฐ๋ง ๋ฑ๋กํ์ฌ ๊ณต์ ํ๋ค
์ค์ ์ผ๋ก ์ฑ๊ธํค์ด ์๋๊ฒ ํ ์๋ ์์ง๋ง, ๋๋ถ๋ถ์ ์ฑ๊ธํค์ผ๋ก ์ฌ์ฉํ๋ค..
(๊ถ๊ธ์ฆ : ์ฑ๊ธํค์ด ์๋๋ผ๋ฉด, ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋กํ ํ์๊ฐ ์์๊น? ์์กด์ฑ ์ฃผ์ ์ ์ํด ํ๋ ๊ฒ์ธ๋ฐ, ์์กด์ฑ ์ฃผ์ ์ด ์๋๋ ๊ฒ ์๋์ง...? ์ธ์ ๊ฐ ํด๊ฒฐํ๊ณ ํ ์ง๋ฌธ)
2. ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
@Service, @Repository๊ฐ ์๋ @Configuration์ด ๋ถ์ด์๋ SpringConfig ํด๋์ค์์ ๊ฐ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ @Bean ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ค๋ค
-> @Controller๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋กํด์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํ์์ด๋ฏ๋ก ๋ณ๋ ์ค์ ํ์ง ์๊ณ @ComponentScan์ ํตํด ์๋ ๋ฑ๋ก๋ ์ ์๋๋ก ํ๋ค + @Autowired
cf) ๊ทธ ์ธ์๋ xml๋ก ์ค์ ํ ์๋ ์์ง๋ง, ์๋ต
cf) DI์๋ ํ๋ ์ฃผ์ , setter ์ฃผ์ , ์์ฑ์ ์ฃผ์ ์ด ์๊ณ , ์์ฑ์ ์ฃผ์ ์ด ๊ถ์ฅ๋๋ค
ex) ํ๋ ์ฃผ์ : ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค
@Autowired private MemberService memberService;
setter ์ฃผ์ : public์ผ๋ก ๋ ธ์ถ๋์ด ์๋ฌด๋ ๊ทธ ์ด๊ธฐํ ๊ฐ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๋จ์
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
์์ฑ์ ์ฃผ์ : ์ฒ์ ์์ฑ์๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ฉฐ ๊ทธ ๊ฐ์ ๊ณ ์ ํ๊ณ ์ดํ ๋ณ๊ฒฝ์ ๋ง์ ์ ์๋ค
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
cf) ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ ํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉ. ๊ทธ๋ฆฌ๊ณ ์ ํํ๋์ง ์๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ฉด ์ค์ ์ ํตํด ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค(2๋ฒ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค)
1๋ฒ๊ณผ 2๋ฒ์ ์ฅ๋จ์
1๋ฒ : ์ฌ์ฉ์ด ๊ฐํธํ๋ค
2๋ฒ : ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ, @Bean ์์ฑ์๋ง ๋ฐ๊พธ๋ฉด ์ ๋ถ ๋ณ๊ฒฝ๋๋ฏ๋ก ๋ณ๊ฒฝ์ด ๊ฐํธํ๋ค
@Autowired๋ 1๋ฒ ํน์ 2๋ฒ, ์ด๋ค ๊ฒ์ด๋ Bean์ผ๋ก ๋ฑ๋ก๋ ํ(์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก)์ ๊ทธ ๊ธฐ๋ฅ์ด ๋์ํ๋ค