IoC (Inversion Of Control, 제어의 역전)
- 객체(인스턴스)의 생명주기 관리를 개발자가 아닌 Spring Container (IoC Container)가 모두 맡아서 함
→ 제어의 역전 (프로그램의 제어 흐름이 뒤바뀜)
: 실행의 제어권이 개발자에서 Spring Boot 프레임워크로 넘어감
→ 제어 흐름의 일부/전부를 프레임워크가 제어함
→ 프로그램의 유연성 & 재사용성 향상
- 소프트웨어 디자인 패턴
- Spring Container에 올라간 Bean 객체들은 모두 싱글톤 패턴으로 관리됨
- Spring의 목표
: 내부적으로 Servlet Container를 가지고 있지만, 개발자가 그에 대해 신경쓰지 않고
Spring Container에 대해서만 관리하도록 함
# Bean 객체
- Spring Container가 관리하는 객체
- Bean 객체로 지정하는 어노테이션
· @RestController : RESTful API를 처리하는 Controller 객체
· @Controller : View를 처리하는 Controller 객체
· @Component : 1개의 클래스를 지정
· @Configration : 2개 이상의 클래스를 지정
· @Bean : 1개의 외부 라이브러리로부터 생성한 객체를 지정
DI (Dependency Injection, 의존성 주입)
- 클래스가 자신이 사용할 객체를 직접 생성하지 않고, 외부에서 이를 주입받아 사용하는 것
- 스프링이 관리하는 객체를 원하는 곳에서 자유롭게 가져와서 사용함
- 필요할 때 Spring Container에서 가져와서 사용함
: IoC로 만들어져 있는 것을 가져와서 사용함
→ IoC 대상으로 등록되어 있지 않다면 DI를 사용할 수 없음
- IoC의 한 형태 (IoC를 구현하는 방법 중 하나)
- 클래스 간의 의존성을 줄임
· 의존성으로부터 격리시켜, 코드 테스트가 용이함
· 루즈 커플링 가능
· 코드를 확장/변경할 때 그에 대한 영향을 최소화함 (추상화)
- 클래스의 재사용성 & 유연성 향상
- DI를 자동으로 설정하는 어노테이션 : @Autowired
→ 대상이 IoC의 대상으로 등록되어 있는지 확인 !
- 전략 패턴을 이용한 DI 구현 예시 : https://young0105.tistory.com/190
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] AOP (관점 지향 프로그래밍) ★ (0) | 2023.04.11 |
---|---|
[Spring Boot] ResponseEntity (0) | 2023.04.11 |
[Spring Boot] REST API - Controller 구현 예시 (0) | 2023.04.10 |
[Spring Boot] MVC 패턴 (0) | 2023.04.10 |
[Spring Boot] 파라미터 전달 방식 (0) | 2023.04.09 |