1.DI(Dependency Injection)
๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๋ ๋์์ธ ํจํด
DI๋ ๊ฐ์ฒด๊ฐ ์ง์ ์์ ์ ์์กด์ฑ์ ์์ฑํ์ง ์๊ณ , ์ธ๋ถ์์ ์ฃผ์
๋ฐ๋ ๋ฐฉ์์ผ๋ก
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ด์ ๋ฌ์ ํด๋์ค ๋ ๋ฒจ์์๋ ์์กด๊ด๊ณ๊ฐ ๊ณ ์ ๋์ง ์๋๋ก ํ๊ณ
๋ฐํ์ ์์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ์ฃผ์
ํ๋ค.
๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
๊ฒฐํฉ๋ ๊ฐ์: ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์
๋ฐ๊ธฐ ๋๋ฌธ์ ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ค.
ํ
์คํธ ์ฉ์ด์ฑ: DI๋ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ชจํน(mocking)ํ๊ฑฐ๋ ๋์ฒดํ ์ ์๊ฒ ํ์ฌ ๋จ์ ํ
์คํธ๋ฅผ ์ฉ์ดํ๊ฒํ๋ค.
๋ช
ํํ ์์กด ๊ด๊ณ: ์์ฑ์๋ ์ธํฐ ๋ฉ์๋๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์
๋ฐ๊ธฐ ๋๋ฌธ์, ํด๋์ค๊ฐ ์ด๋ค ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋์ง ์ฝ๊ฒ ํ์
ํ ์์๋ค.
๊ฐ์ฒด์ ์์ฑ, ๊ตฌ์ฑ, ์์กด์ฑ ์ฃผ์
, ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฑ์ ๋ด๋นํ๋ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ๋ฆฌ์ผ์ด์
์ ๊ฐ์ฒด๋ค์ด ํ์๋ก ํ๋ ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์
ํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์๋์ธ๋ค.
Spring ํ๋ ์์ํฌ๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ DI ์ปจํ
์ด๋ ์ค ํ๋์ด๋ค.
4-1.DI๋ฅผ ์ฌ์ฉ์ํ์์
๊ฐํ ๊ฒฐํฉ๋๋ฅผ ์ด๋ํ๋ฉฐ, MyRepository๋ฅผ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ๋์ฒดํ๊ธฐ ์ด๋ ต๋ค.
public class MyService {
private MyRepository myRepository ;
public MyService () {
this .myRepository = new MyRepository (); // MyRepository๋ฅผ ์ง์ ์์ฑ
}
}
MyRepository์ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ์ฝ๊ฒ ๋์ฒดํ ์ ์๋ค.
import org .springframework .beans .factory .annotation .Autowired ;
import org .springframework .stereotype .Service ;
import org .springframework .stereotype .Repository ;
@ Repository
public class MyRepository {
}
@ Service
public class MyService {
private final MyRepository myRepository ;
@ Autowired
public MyService (MyRepository myRepository ) {
this .myRepository = myRepository ; // ์์กด์ฑ์ ์ฃผ์
๋ฐ์
}
}