2019. 1. 5. 16:58ㆍSpring Boot
IOC란
inversion of control 이라는 뜻이다.
직역을 하자면 제어의 역전이라는 뜻인데, 뜻을 다시 해석하자면 나 대신 다른 누군가가 제어를 해준다는 뜻이다.
예를 들어 생성자를 생성할 때, 우리는
User user = new User();
뭐 이런 식으로 했겠지만, 그럴 필요가 없어진 것이다.
뒤의 new User가 없어 지는 것이다. 왜냐하면 스프링이 알아서 해주기 때문이지.
IOC 컨테이너
사실 백날 이야기해도 나같은 놈은 전혀 이해하지 못한다. 멍청하거든.
그래서 그림으로 설명하는 것이 아~주 아주 간편하다.
위의 그림과 같이 Ioc 컨테이너가 있다. 그냥 스프링이라고 생각해보자. 우리가 컨트롤러 혹은 서비스, 레파지토리를 만들기 위해서는 항상 생성자로 만들었다.
하지만 스프링부트에서는 @Bean 혹은 @Component를 사용해서 객체들을 ioc컨테이너가 알아서 생성 해주는 것이다.
굉장히 똑똑하지. 그 방법이 DI(의존성 주입)인데. 많은 사람들이 ioc 와 di를 똑같다고 생각한다 더라. di는 ioc의 방법중 하나이다!!
@Bean
그렇다면 객체들 즉, @Bean, @Component로 지정된 객체들은 어떻게 스프링부트가 갖고 오는 것인가. 아니 먼저 @Bean이 무엇인지에 대해서 말해야 하나?
@Bean은 스프링의 객체라고 설명하면 좋겠다. @Controller, @Service, 뭐 등등이 있겠지만, 스프링에 @Component가 내제되어 있는 위의 컨트롤러, 서비스는 @Bean으로 지정하지 않아도 스프링에서 컴포넌트스캐너가 알아서 찾아준다. 하지만, 내제 되어있지 않은, 내가 직접 만들고 싶은 객체는 @Bean을 사용한다고 알고 있으면 좋을것 같다.
그러니깐 스프링의 컴포넌트 스캐너가 저저 @Component라고 지정 했거나, @Bean 어노테이션이 붙어 있는 것들을 가져온다.
하지만 여기서 Repository를 많이들 사용할 건데. Repository에는 아무 어노테이션이 붙지 않았어! 라고 생각할 수도 있지만, 우리는 레파지토리를 만들 때, 상속 받지 않나? 예를 들어 JpaRepository, CrudRepository 등등 에서 받을때, 그 레파지토리가 이미 @Component 되어있기 때문에 알아서 컴포넌트 스캐너가 읽어준다.
기가 막히죠?
@SpringBootApplication
그리고 순서가 바뀌었지만 스프링부트를 시작 하기 위해서는 이 어노테이션을 해줘야 스프링 부트를 시작할 수 있다. 스프링부트어플리케이션이 없다면 스프링 부트를 시작할 수 없다고 생각하자.
이렇게 말이다.
'Spring Boot' 카테고리의 다른 글
Ajax란 무엇일까? (0) | 2019.05.15 |
---|---|
스프링 프레임워크(Spring Framework)에 대해서 (3) | 2019.05.05 |
Aop 에 대해서 (0) | 2019.02.05 |
Spring Boots 기초2 (0) | 2018.11.18 |