@Autowired ์์กด์ฑ ์ฃผ์
๊ถ๊ธํ
์ ๋ฏธ์ฝํ ์ง์์ด ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค! 1. ๋ถ๋ณ์ฑ//ํ๋ ์ฃผ์
๋ฐฉ์ @Autowired private final MemberRepository memberRepository; // final์ด ์๋ค๋ฉด ์์ฑ์๋ก ์ด๊ธฐํ๋ฅผ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ํ๋ฆฐ java ๋ฌธ๋ฒ์ด๋ผ ์๊ฐํฉ๋๋ค. @Autowired private MemberRepository memberRepository; // final ํค์๋ ์์ // ์ง๋ฌธ์๋์ ์๋๋ ์ด๊ฑฐ ์์ ๊ฒ ๊ฐ์ ์ด๊ฒ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช
๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค!๋จผ์ ์์ ์ฝ๋๋ ํ๋ ์ฃผ์
(Field Injection)์ด๋ฉฐ, ์์กด์ฑ ์ฃผ์
์ดํ์๋ ํด๋น ํ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ(mutable) ์ํ๊ฐ ๋์ด, ๋ฐํ์ ์ค ๊ฐ์ฒด์ ์ํ๊ฐ ์๊ธฐ์น ์๊ฒ ๋ณ๊ฒฝ๋ ์ํ์ด ์์ต๋๋ค. // ์์ฑ์ ์ฃผ์
๋ฐฉ์ @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } ๋ฐ๋ฉด ์์ฑ์ ์ฃผ์
(Constructor Injection)์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ, ๋ชจ๋ ์์กด์ฑ์ด ์์ฑ์๋ฅผ ํตํด ์ฃผ์
๋๊ณ , ํ๋๋ final๋ก ์ ์ธ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ดํ์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๋ถ๋ณ์ฑ(immutable)์ ๋ณด์ฅํ์ฌ, ๊ฐ์ฒด์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.2. ๋ช
์์ ์ธ ์์กด์ฑ์์ฑ์ ์ฃผ์
(Constructor Injection)์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ํ ์์กด์ฑ์ด ๋ช
์์ ์ผ๋ก ๋๋ฌ๋ฉ๋๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ์ํ ๋ชจ๋ ์์กด์ฑ์ด ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์, ์ด๋ค ์์กด์ฑ์ด ํ์ํ์ง ๋ฐ๋ก ์์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ์ฝ๋์ ๊ฐ๋
์ฑ์ด ์ฆ๊ฐํ๊ณ , ํ์ ์์กด์ฑ์ ๋๋ฝ์ํค๋ ์ค์๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๊ฒ ๋ฉ๋๋ค.ํ์ง๋ง ํ๋ ์ฃผ์
(Field Injection)์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ํด๋์ค ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด์ง ์๊ณ ๋ ๊ฐ์ฒด ์์ฑ์ ํ์ํ ์์กด์ฑ์ด ๋ฌด์์ด ์๋์ง ์ฆ๊ฐ์ ์ผ๋ก ์ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.3. ํ
์คํธ ์ฉ์ด์ฑ์์ฑ์ ์ฃผ์
์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ, ํ
์คํธ ์ฝ๋์์ ํน์ ๊ตฌํ์ฒด๋ ๋ชฉ(mock) ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ฃผ์
ํ ์ ์์ต๋๋ค. ๋ถ์ฐ ์ค๋ช
์ ํ์๋ฉด ์คํ๋ง ์ปจํ
์ด๋ ์์ด๋ ์์ ์๋ฐ ์ฝ๋๋ก ๋จ์ ํ
์คํธ๋ฅผ ์งํํ ์ ์๊ฒ ๋๋ฉฐ, ํ
์คํธ์ ๋จ์์ฑ๊ณผ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.ํ๋ ์ฃผ์
์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ, ๋ฆฌํ๋ ์
๊ฐ์ ์ถ๊ฐ์ ์ธ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ์๋ ํ, ํ
์คํธ ํ๊ฒฝ์์ ์์กด์ฑ์ ์ฃผ์
ํ๊ธฐ ์ด๋ ต์ต๋๋ค.// ์ฐธ๊ณ : ๋ฆฌํ๋ ์
์ด๋, ์๋ฐ์์ ์ ๊ณตํ๋ API๋ก ๋ฐํ์ ์์ ์์ ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ํจ. ์์ธํ ๊ถ๊ธํ๋ค๋ฉด ํ๋ฒ ์ฐพ์๋ณด์ธ์!4. ์ํ์ฐธ์กฐ ๋ฐฉ์ง์์ฑ์ ์ฃผ์
์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ดํ๋ฆฌ์ผ์ด์
์์ ์์ ์์ ๋ฐ๋ก ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ฆ, ์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ ์ ์๊ฒ ํด์ค๋๋ค.ํ์ง๋ง ํ๋ ์ฃผ์
์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ, ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์์ ์์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ , ๋ฐํ์ ์ค์๋ง ๋ฌธ์ ๊ฐ ๋๋ฌ๋์ ๋๋ฒ๊น
ํ๋๊ณ ๋ง์ ๊ณ ์์ ํ๊ฒ๋ ๊ฒ์
๋๋ค.ใ
ใ
์ ๋ฆฌํ์๋ฉด ์ด๋ ๊ฒ ํฌ๊ฒ 4๊ฐ์ง ์ด์ ๋ก ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์์กด์ฑ ์ฃผ์
์ ํ ๋๋ ์์ฑ์ ์ฃผ์
์ ๊ถ์ฅํ๋ค๊ณ ํฉ๋๋ค. But, ์ํฉ์ ๋ฐ๋ผ ํ๋ ์ฃผ์
์ด๋ setter ์ฃผ์
์ด ๋ ์ ํฉํ ๊ฒฝ์ฐ๋ ์์ผ๋ ์ค์น๋๊ป์ ๊ฐ๋ฅด์ณ ์ฃผ์ ๋ฐฉ๋ฒ๋ค๋ ์ถฉ๋ถํ ์์งํ๊ณ ์๋ค๋ฉด ๋์ค์ ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค. // ์ ๋ ์คํ๋ง์ ๋ฐฐ์ฐ๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๊ณผ๊ฐํ๊ฒ ์ง์ ํด์ฃผ์ธ์!!ํ์ํฉ๋๋ค~~