IOC (Inversion Of Control, 제어의 역전)
- 정의 : 객체의 생성 및 관리의 제어권을 개발자가 아닌 스프링 프레임워크가 담당
- 스프링에서는 컨테이너가 이를 담당
- 목적 : 효율적이고 규칙적인 객체를 관리/사용하기 위해 스프링이 대신 처리
- 이유: 여러 사람이 비규칙적으로 객체를 사용하면 중복 객체 혹은 객체 충돌 발생 가능
- 주요 어노테이션
- @Component : 컨테이너(스프링 메모리/저장소)에 클래스의 빈(bean) 정보 등록
- @Component 내장 주요 어노테이션
- @Controller, @RestController, @Service, @Repository, @Configuration 등
- 각기 다른 기능과 @Component가 내장됨
- 주로 MVC 패턴 빈 등록, 즉 MVC 패턴은 IOC 기반이며 스프링 필수 패턴
DI (Dependency Injection, 의존성 주입)
-
정의 : 객체를 직접 생성하지 않고 외부(스프링 컨테이너)로부터 주입받는 방법
-
목적 : 객체 간 결합도를 낮추고 유지보수성을 향상
-
주요 어노테이션
- @Autowired : 스프링 컨테이너에 등록된 빈(객체)을 꺼내옴
-
사용법
-
멤버변수(필드)에 주입
@Autowired
클래스명 변수명;
-
생성자에 주입 (권장, final 사용)
final 클래스명 변수명;
@Autowired
public 클래스명(클래스명 매개변수명) {
this.변수명 = 매개변수명;
}
-
Setter를 이용한 주입
클래스명 변수명;
@Autowired
public void set변수명(클래스명 매개변수명) {
this.변수명 = 매개변수명;
}
- 주의 : DTO는 싱글톤이 없으므로 IOC/DI와 상관없음, IOC/DI는 싱글톤 객체 관리에 유용
IOC 구조 예시
[IOC]
--스프링 컨테이너--
| |
| |
| boardControl | ----- @Autowired -------> boardControl 객체 꺼내기
| |
| |