티스토리 뷰
스프링의 핵심 요소 중 가장 많이 꼽히는 요소로 의존성 주입, DI(Dependency Injection)이 있다.
"Engine" 속성을 가진 "Car"라는 클래스를 개발하고 있다고 가정해보고 간단히 이런 코드를 만들었다.
public class Car {
private Engine engine;
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
여기서 "Engine"은 "Car" 클래스에 종속된다. 스프링이 없는 자바에서는 "Car" 클래스 내에 "Engine" 클래스의 인스턴스를 만들어서 사용한다.
public class Car {
private Engine engine = new Engine();
public Engine getEngine() {
return engine;
}
}
그러나 이런 방법은 몇 가지 문제가 생길 수 있다.
첫째, "Engine" 타입을 변경하거나 다른 구현체로 교체하는 것이 어렵다.
둘째, "Car" 클래스는 항상 "Engine" 인스턴스가 필요해서 "Car" 클래스 만을 단위테스트하기가 어렵다.
이에 비해 Dependency Injection은 "Engine" 인스턴스는 외부에서 생성하고 관리하며 필요할 때 "Car" 클래스로 전달되는 방식이다.
public class Car {
private Engine engine;
public Engine getEngine() {
return engine;
}
@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}
}
위의 예에서 Engine 클래스의 인스턴스를 찾아서 Car 클래스에 주입하는 기능을 사용할거라고 Spring에게 알려주기 위해 @Autowired 애노테이션을 메소드 위에 적어준다.
이렇게 하면 Spring은 Engine 인스턴스를 생성하고 관리하며, 필요할 때마다 Car 클래스에 전달해준다.
이렇게 하면 Engine 클래스의 다양한 구현체를 만들고 필요에 따라 쉽게 전환할 수 있다.
또한 Car 클래스는 내부에서 Engine 클래스 인스턴스를 생성하지 않기 때문에, 작동하는 Engine 인스턴스 없이도 격리하여 단위테스트를 할 수 있다.
여기까지가 Spring에서 사용하는 의존성 주입의 아주 기본적인 컨셉이다.
물론 위의 예시는 이해를 위한 아주 단순한 예시일 뿐, 실제 구현에서는 아래처럼 생성자 주입 방식을 사용하는 것을 추천한다.
public class Car {
private Engine engine;
// 생성자 주입은 @Autowired를 붙이지 않아도 Spring이 알아챌 수 있다.
public Car(Engine engine) {
this.engine = engine;
}
public Engine getEngine() {
return engine;
}
}
'dev > java' 카테고리의 다른 글
DTO, VO, MODEL 의 차이점과 사용 사례 (0) | 2023.02.03 |
---|---|
처음 하는 스프링 부트(Spring Boot), MyBatis와 MariaDB (0) | 2020.03.29 |
처음 하는 스프링 부트(Spring Boot), Controller와 JSP (0) | 2020.03.22 |
처음 하는 스프링 부트(Spring Boot), 프로젝트 생성하기 (0) | 2020.03.21 |
처음 하는 스프링(Spring), Service와 Controller (2) | 2018.08.01 |
- Total
- Today
- Yesterday
- spring
- 블라디보스톡
- 두번가요
- Tomcat
- 맛집
- 세번가요
- 화려해
- JMT
- MariaDB
- 교환코드
- AFK아레나
- 변수
- 이클립스
- 루블
- mybatis
- 스프링
- 스타벅스
- 쏠편한환전
- 커피프렌즈
- Java
- Nasdaq
- 내돈돌려줘
- 자작냉우동
- sbux
- 꿈의숫자
- 환전
- MVC
- 주식
- controller
- 설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |