์ ์ด ์ญ์ (Inversion of Control)
์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ๋ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ธ(new)ํ๊ณ , ์ ์ดํ๋ ๊ตฌ์กฐ ์ ๋๋ค.
ํ์ง๋ง! ์ ์ด ์ญ์ ์ ํน์ง์ผ๋ก ํ๋ ์คํ๋ง์ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ์ธ๋ถ(Spring Container, IoC Container)์ ์์ ํฉ๋๋ค.
์ด์ฒ๋ผ ๊ฐ์ฒด์ ๊ด๋ฆฌ๋ฅผ ์ปจํ ์ด๋์ ๋งก๊ฒจ ์ ์ด๊ถ์ด ๋์ด๊ฐ ๊ฒ์ ์ ์ด ์ญ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
IoC ์ปจํ ์ด๋ ์ญํ
- ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์์กด์ฑ ๊ด๋ฆฌ
- ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ ๋ฐ ์๋ฉธ ๋ด๋น
- ์์ค ๊ตฌํ ์๊ฐ์ ๋จ์ถ์ํค๊ณ , ์์กด ๊ด๊ณ ๋ฎ์ถค
์์กด์ฑ ์ฃผ์ (DI)
์ ์ด ์ญ์ ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , ์ธ๋ถ ์ปจํ ์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ์
- ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
- ํ๋ ๊ฐ์ฒด ์ ์ธ์ ํตํ ์์กด์ฑ ์ฃผ์
- setter ๋ฉ์๋๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
์คํ๋ง ๊ณต์ ๋ฌธ์์์๋ ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋๋ก ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
์? ์์์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด ์์ด๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ ์ ์๊ฒ ์ค๊ณํ ์ ์๊ธฐ ๋๋ฌธ
๋ํ์ ์ผ๋ก @Autowired๋ผ๋ ์ด๋ ธํ ์ด์ ์ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ ์ ์์ต๋๋ค.
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService) {
this.myService = myService;
}
@GetMapping("/di/hello")
public String getHello() {
return myService.getHello();
}
}
Spring Annotation ๊ธฐ๋ณธ ์ค์
Bean ๋ฑ๋ก ์ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์
Bean์ ์คํ๋ง ๋ถํธ์ ํต์ฌ ๊ฐ๋ ์ผ๋ก ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด ์ ๋๋ค.
@Component
- JDBC์ VO์ ๋งคํ
- ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ง๋ ํด๋์ค๋ฅผ Bean์ ๋ฑ๋กํ ๋ ์ฌ์ฉ
@Repository
- JDBC์ DAO์ ๋งคํ
- ์์์ฑ(์ข ๋ฃํด๋ ์ ์ฌ๋ผ์ง)์ ๊ฐ์ง ํด๋์ค(DB์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ ์ด์ด)
@Service
- ์๋น์ค ๋ ์ด์ด, ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง ํด๋์ค
- ์) ํธ๋์ญ์
@Controller
- ์์ฒญ๊ณผ ์๋ต๋ง ์ฒ๋ฆฌ
์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉ
@Autowired
- ์์กด ๊ด๊ณ ์ฃผ์ ์ด ํ์ํ ๊ฒฝ์ฐ
- ํ๋ ๋ณ์, setter ๋ฉ์๋, ์์ฑ์, ์ผ๋ฐ ๋ฉ์๋์ ์ ์ฉ ๊ฐ๋ฅ
@Qualifier
- ํ ํ๋ก์ ํธ ๋ด์ @Autowired๋ก ์์กด์ฑ์ ์ฃผ์ ํ๊ณ ์ ํ๋ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๊ฒฝ์ฐ
@Resource
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์๋ก ํ๋ ์์์ ์๋์ผ๋ก ์ฐ๊ฒฐํ ๋
@Value
- ๋จ์ ๊ฐ์ ์ฃผ์ ํ ๋
'๐๏ธ Backend > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Boot - 2. REST API๋ฅผ ์์ฑํ๋ ๋ค์ํ ๋ฐฉ๋ฒ (0) | 2023.06.07 |
---|---|
Spring Boot ๋ค์ด๊ฐ๊ธฐ ์ Java์์ ํต์ฌ์ ์ผ๋ก ์์์ผ ํ ๊ฐ๋ ์ ๋ฆฌ (0) | 2023.06.05 |