IoC(Inversion of Control) 란 객체 생성 및 호출과 같은 객체 관리 주체를 개발자에서 프레임워크인 스프링에게 넘겨줌으로써 역할이 바뀌는 것을 말한다.
이를 실현하려면, 스프링은 어떤 객체를 관리해야하는지 알고, 어느부분에 객체를 사용해야 하는지 알 필요가 있다.
그렇다면, 우리 개발자는 스프링에게
1. 어떤 객체를 관리해야하는지
2. 어느 부분에 관리를 부탁한 객체를 사용해야 하는지
알려줘야 한다.
어떤 객체를 관리해야하는지 알려주기 위해, @Component Anotation을 사용한다.
어느 부분에 관리를 부탁한 객체를 사용해야하는지 알려주기 위해, @Autowired Anotation을 사용한다.
프로젝트를 실행시키면, 스프링은 모든 클래스를 보면서, 이렇게 작성한 Anotation을 찾고, @Component가 달린 객체는 스프링빈으로 생성한다.
@Autowired를 사용함으로써, 이미 생성된 객체를 주입할 수 있는데 이를 통해 DI를 실현하는 것이다.
그런데, 스프링을 직접 사용하게 되면 @Component보다 @Controller, @Service, @Repository 이렇게 각 역할에 맞는 어노테이션을 사용하게 된다. 그 이유는 뭘까?
@Controller
- @Controller 어노테이션아래에서만 @RequestMapping을 사용할 수 있음,
@Service
- 데이터 관련된 다양한 로직이 있지만, 특히 데이터를 연산이라는 곳임을 명시하기 위한 것
- Component 어노테이션이 아닌 Service 어노테이션을 사용함으로써, 컨트롤러의 요청을 받아 로직을 처리한다는 것을 명시적으로 알려줌
@Repository
- DB의 기본적인 예외를 포함하고 있음
- persistence/data layer에서 데이터 접근 시 발생하는 예외를 잡아서 DataAccessException으로 처리PersistenceExceptionTranslationPostProcessor
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] Bean관리 누가할래? in TEST (@SpringBootTest @Test 알고 쓰기) (0) | 2024.07.30 |
---|---|
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |
[Spring] Data Binding의 3가지 방법 (0) | 2024.07.22 |
[Spring] IoC를 실현하기 위한 DI(의존 관계 주입) 방법 3가지 (0) | 2024.07.18 |
[Spring] 객체지향적인 개발을 하도록 도와주는 IoC와 DI (0) | 2024.07.16 |