์์กด์ฑ ์ฃผ์ (DI; Dependency Injection)
์ ์ด์ ์ญ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ ์ปจํ ์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์๋ฏธ
์คํ๋ง์์ ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ
- ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
- ํ๋ ๊ฐ์ฒด ์ ์ธ์ ํตํ ์์กด์ฑ ์ฃผ์
- setter ๋ฉ์๋๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
์คํ๋ง์์๋ @Autowired
๋ผ๋ ์ด๋
ธํ
์ด์
์ ํตํด ์์กด์ฑ์ ์ฃผ์
ํ ์ ์์
1. ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
@RestController
public class DIController{
MyService myService;
@Autowired
public DIController(MyService myService){
this.myService = myService;
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
}
2. ํ๋ ๊ฐ์ฒด ์ ์ธ์ ํตํ ์์กด์ฑ ์ฃผ์
@RestController
public class DIController{
@Autowired
privat MyService myService;
}
3. setter ๋ฉ์๋๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
@RestController
public class DIController{
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService = myService;
}
}
โ
๊ถ์ฅํ๋ ์์กด์ฑ ์ฃผ์
๋ฐฉ๋ฒ์ ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์
๋ฐ๋ ๋ฐฉ์
๋ค๋ฅธ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์
๋ฐ๋ ๋ฐฉ์์ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด ์์ด๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ ์ ์๊ฒ ์
๊ณํ ์ ์๊ธฐ ๋๋ฌธ
DI ์ฅ์
์์กด์ฑ ์ฃผ์
์ ๋ฐ๋๋ค๋ฉด, ํด๋์ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ์ฝํด์ง.
ํด๋์ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ์ฝํด์ง๋ค๋ ๊ฒ์ ํ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋ ํ์์ฑ์ด ์ ์ด์ง๋ค๋ ๋ป
์ด๋ก ์ธํด์ ๋ค์ํ ์ฅ์ ์ด ์๊น
- ํด๋์ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ์ฝํด์ ธ, ๋ฆฌํฉํ ๋ง์ด ์ฌ์์ง
- ํด๋์ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ์ฝํด์ ธ, ํน์ ํด๋์ค๋ฅผ ํ ์คํธํ๊ธฐ๊ฐ ํธํจ
- ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ์ค๊ณ๋ ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ํจ. ํ์ฅ์ ์ฝ๊ฒ ํจ
- UI๊ฐ ์๋ ํ๋ก๊ทธ๋จ์์๋ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ค์ํ๋ฐ, ์๋ช ์ฃผ๊ธฐ๋ณ๋ก Container๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ค๋ฉด ๋ฆฌ์์ค์ ๋ญ๋น๋ฅผ ๋ง์ ์ ์์
์ ๋ฆฌ
DI๋ ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ ์ธํ๊ณ ์ด๋ฅผ ์ฃผ์ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ์ด ์ง์ - 1 (0) | 2022.09.01 |
---|---|
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP) (0) | 2022.09.01 |
์ ์ด์ ์ญ์ ( IoC ) (0) | 2022.09.01 |
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.08.31 |
์คํ๋ง์ด๋ ? (0) | 2022.08.31 |