스프링 프레임워크란?
- 자바 기반 애플리케이션 프레임워크
- 자바에서 가장 많이 사용하는 프레임워크다.
- 자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구
스프링의 특징으로는 제어 역전(IoC)와 의존성 주입(DI)이 있다.
제어 역전 (IoC)
기존 자바에서는 객체를 생성하고 관리하는 제어 권한이 사람(개발자)에게 있었는데,
제어 권한이 스프링에게 넘어가서 제어의 역전(IoC)이라고 한다.
-> 원래 객체의 관리 제어권이 사용자에게 있었는데 스프링으로 제어권이 넘어갔다.
사용할 객체를 직접 생성하지 않고, 객체의 생명주기 관리를 외부(스프링 컨테이너)에 위임하는 것
의존성 주입 (DI : Dependency Injection)
제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
제어의 역전을 통해서 스프링 컨테이너에 생성된 객체를 의존성 주입을 통해서 변수에 가져와서 사용한다.
의존성을 주입하는 4가지 방법
1. 필드 주입 - @Autowired 사용
변수 위에 @Autowired 를 붙여서 사용한다.
코드가 간결하지만 외부에서 변경이 불가능하기 때문에 테스트하기 힘들다는 단점이 있다.
Service 클래스
import org.springframework.stereotype.Service;
@Service
public class Test01Service {
public void serviceEx01() {
System.out.println("serviceEx01");
}
}
Controller 클래스
@Controller
public class Test01Controller {
// 의존성 주입(DI)
@Autowired
Test01Service test01Service;
public void controllerEx01() {
test01Service.serviceEx01();
}
}
2. 일반 메소드 주입 - 매개변수 사용
일반 메소드의 매개변수를 통해서 의존성을 주입하는 방법이다.
한 번에 여러 필드를 주입할 수 있다는 장점이 있다.
생성자, 수정자(setter) 주입과 비슷하기 때문에 거의 사용하지 않는다.
@Controller
public class Test01Controller {
// 의존성 주입(DI)
private Test01Service test01Service;
private Test02Service test02Service;
@Autowired
public void controllerEx01(Test01Service test01Service, Test02Service test02Service) {
this.test01Service = test01Service;
this.test02Service = test02Service;
}
}
3. 수정자 주입 - setter 사용
setter를 사용해서 의존성을 주입하는 방법이다.
@Controller
public class Test01Controller {
// 의존성 주입(DI)
private Test01Service test01Service;
@Autowired
public void setTest01Service(Test01Service test01Service) {
this.test01Service = test01Service;
}
}
4. 생성자 주입 (⭐추천)
생성자를 통해서 의존성을 주입하는 방법이다.
생성자 호출 시점에 딱 1번만 호출되기 때문에, 주입받은 객체가 변하지 않는다. (불변)
반드시 필요한 의존 관계에 사용한다. (필수)
@Controller
public class Test01Controller {
// 의존성 주입(DI) : 스프링 컨테이너에 생성된 객체(Bean)을 가져오는 것
private final Test01Service test01Service;
// @Autowired 는 생성자가 1개만 있으면 생략 가능
public Test01Controller(Test01Service test01Service) {
this.test01Service = test01Service;
}
public void controllerEx01() {
test01Service.serviceEx01();
}
}
스프링 vs 스프링 부트
스프링은 개발자가 다양한 설정을 직접 해야 하는 프레임워크로, 유연하지만 설정이 복잡하다.
스프링 부트는 스프링을 기반으로 한 자동 설정 프레임워크로, 설정을 최소화하여 개발 속도를 높이고 유지보수를 쉽게 만든다.
=> 스프링 부트는 스프링으로 애플리케이션을 만들 때 필요한 설정을 간편하게 처리해주는 별도의 프레임워크!
'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] 컴포넌트 스캔 / Bean (0) | 2025.02.04 |
---|