IoC(Inversion of Control, 제어의 역전)
- 스프링에서는 일반적인 자바 객체를 new로 생성하여 개발자가 관리하지 않고 스프링 컨테이너에게 맡긴다. (싱글톤의 형태로 관리된다.)
- 즉, 객체나 메서드에 대한 제어의 관리 권한을 제3자인 프레임워크로 넘긴다. 이를 "제어의 역전"이라고 한다.
- 스프링 프레임워크의 가장 큰 특징이다.
- IoC의 주된 목적: 의존 관계를 제거 => 느슨한 결합을 제공 => 클래스의 재사용성을 높임( => 중복 코드 제거)
DI(Dependency Injection)
외부(스프링 컨테이너)로부터 사용할 객체를 주입 받는다.
DI의 장점
- 의존성으로부터 격리시켜(의존하고 있는 객체와 분리하여), 코드 테스트에 용이하다.
- 불가능한 상황을 Mock와 같은 기술을 통하여 안정적으로 테스트할 수 있다.
- 코드를 확장하거나 변경할 때 영향을 최소화한다. (추상화)
- 순환 참조를 막을 수 있다.
- 순환 참조 : 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상. (ex. 내가 나를 참조하거나, 내가 참조하는 객체가 다시 나를 참조하거나 ...)
의존성 주입 방법
1. 생성자 주입(*권장)
@Controller
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
}
1-2. 스프링 4.3 버전 이상에서는 @Autowired 생략이 가능하다.
@Controller
@RequiredArgumentConstructor
public class UserController {
private final UserService userService;
}
2. 필드 주입
@Controller
public class UserController {
@Autowired
private final UserService userService;
}
3. Setter 주입
@Controller
public class UserController {
private final UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
}
'공부 기록 > Spring' 카테고리의 다른 글
[Spring] Exception Handling (0) | 2023.05.04 |
---|---|
[Spring] Validation(2) - Custom Validation (0) | 2023.05.01 |
[Spring] Validation(1) - Annotation (0) | 2023.05.01 |
[Spring] AOP의 활용 (0) | 2023.04.27 |
[Spring] AOP (0) | 2023.03.28 |