๐ก ํ ๋น์ ์คํ๋ง 3.1 Vol1์ ์๋ ๋ด์ฉ์ ๊ณต๋ถํด ์ ๋ฆฌํ์์ต๋๋ค.
๋ง์ง๋ง ์ค์ ์์ฝ์ด ์์ผ๋ ๋ฐ์์ ๋ถ๋ค์ ๋ง์ง๋ง ์ค๋ง ๋ณด์ ๋ ๋ฉ๋๋ค.
์์กด๊ด๊ณ ๊ฒ์๊ณผ ์ฃผ์
์์กด๊ด๊ณ ์ฃผ์ (DI, Dependency Injection)์ด์ธ์๋ ์์กด๊ด๊ณ ๊ฒ์(DL, Dependency Lookup)์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋ค. ์ด๋ ์์กด๊ด๊ณ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ์ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ด ํ์๋ก ํ๋ ์์กด ์ค๋ธ์ ํธ๋ฅผ ๋ฅ๋์ ์ผ๋ก ์ฐพ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์กด๊ด๊ณ ๊ฒ์(Dependency LookUp)์ ์ค์ค๋ก ์ปจํ ์ด๋์ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋๋ค.
public UserDao(){
DaoFactory daoFactory = new DaoFactory()
this.connectionMaker = daoFactory.connectionMaker()
}
์ฆ ์ธ๋ถ์์ ์ฃผ์ ์ด ์๋๋ผ ์ค์ค๋ก IoC ์ปจํ ์ด๋์ธ DaoFactory์๊ฒ ์์ฒญํ๋ ๊ฒ์ด๋ค.
์คํ๋งIoC ์ปจํ ์ด๋์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ getBean() ์ด๋ผ๋ ๋ฐฉ์์ผ๋ก ์์กด๊ด๊ณ ๊ฒ์์ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณด์์๋ ์์กด๊ด๊ณ ์ฃผ์ (DI)์ด๋ ์์กด๊ด๊ณ ๊ฒ์(DL)์ ๋ชจ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ง๋ง ์์กด๊ด๊ณ ๊ฒ์์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์กด์ฌํ๋ค.
“์์กด๊ด๊ณ” ๊ฒ์ ๋ฐฉ๋ฒ์ ์ฝ๋ ์์ ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ ํด๋์ค๋ ์คํ๋ง API๊ฐ ๋ํ๋๊ฒ ๋๋ค.
์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ๊ฐ ์ปจํ ์ด๋์ ๊ฐ์ด ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ์์กดํ๊ฒ ๋๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋์งํ์ง ์๋ค.
๊ทธ๋ ์ง๋ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ์์กด๊ด๊ณ ๊ฒ์์ ์ฌ์ฉํด์ผ๋ง ํ๋ค. ํ ์คํธ ์ฝ๋์์ main() ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ DI๋ฅผ ํตํด์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ ์คํ๋ง ์ปจํ ์ด๋์ ๋ด๊ธด ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์กด๊ด๊ณ ๊ฒ์ ๋ฐฉ์์ ์ด์ฉํด ์ฌ์ฉํด์ผ ํ๋๋ฐ ํ ์คํธ ์ฝ๋์๋ main()๋ฉ์๋๊ฐ ์์ด ์์กด๊ด๊ณ ์ฃผ์ ์ ํ ์ ์๋ค.
์์กด๊ด๊ณ ๊ฒ์(DL)์๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ ์๋๋ฐ
๊ฒ์ํ๋ ์ค๋ธ์ ํธ๋ ์์ ์ด ์คํ๋ง์ ๋น์ผ ํ์๊ฐ ์๋ค๋ ์ ์ด๋ค.
์ถ๊ฐ
โ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ด๋ฏธ ํน์ ํด๋์ค ํ์ ์ผ๋ก ๊ณ ์ ๋์ด ์๋ค๋ฉด DI๊ฐ ์ผ์ด๋ ์ ์๋ค. ๊ทธ๋ ๊ธฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ๋คํ์ฑ์ผ๋ก ์ฃผ์ ๋ฐ์์ผํ๋ค.
โ์คํ๋ง์ ์ฌ์ฉํ๋ฉด LomBok์@RequiredArgsConstructor์ @Autowired๋ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ์ง๋ง ๊ทธ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Junit์ ์ด์ฉํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ์์๋ @RequiredArgsConstructor ๋ฅผ ํตํด์ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ์์กด๊ด๊ณ ์ฃผ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก ๋์ํ์ง ์๋๋ค.