개요
의존성 주입이란, 객체가 필요한 의존성을 외부에서 전달받는 것이다. 스프링에서는 이 괒어을 컨테이너가 자동으로 처리해주기 때문에, 개발자는 객체 생성이나 의존성 관리에 대해 신경쓰지 않고 애플리케이션 로직에만 집중할 수 있다.
예시
평화로운 주말 오후 나는 커피를 마시고 싶다. 커피를 만들기 귀찮으므로 원두를 씹어먹을수도 있겠지만(?) 정제된 커피가 먹고 싶다.
커피를 위해서 필요한건 커피머신, 원두, 물, 컵 등이 있다.
- 의존성
- 커피머신만 있다고 해서 커피를 얻을 수 없다.
- 커피머신으로 커피를 만들기 위해서는 재료들이 제공 되어야한다.
- 커피머신은 재료인 원두, 물, 컵 등에 의존적이다
- 의존성 주입
나는(스프링 컨테이너) 커피 머신에 필요한 재료들을 미리 준비하고, 커피 머신에 넣어준다. → 이것이 바로 의존성 주입이다.
커피 머신이 재료를 직접 찾지 않고, 내가 준비해준 재료들로 바로 커피를 만들 수 있게 돕는 것이다.
프로그래밍에서는..
프로그래밍에서 객체들이 협력하려면, 하나의 객체가 다른 객체를 필요로 하는 경우가 많다.
이 때 필요한 객체를 직접 생성하지 않고, 외부에서 전달 받는 방식이 의존성 주입이다.
public class CoffeeMachine {
private CoffeeBean coffeBean;
private Water water;
public CoffeeMachine (CoffeeBean coffeeBean, Water water){
this.coffeBean = coffeeBean;
this.water = water;
}
public void makeCoffee() {
System.out.println("Making coffee with" + coffeeBean + "and" + water);
}
}
- 의존성
- CoffeeMachine 클래스는 CoffeeBean 클래스와 Water에 의존한다. 이 두 객체가 없으면 CoffeeMachine은 제대로 작동하지 않는다.
- 의존성 주입
- CoffeeMachine 객체를 생성할 떄, 필요한 CoffeeBean과 Water 객체를 생성자에 전달한다.
- 스프링에서는 이 작업을 컨테이너가 대신 해준다.
- 즉, CoffeeMachine 이 직접 CoffeeBean과 Water를 생성하는게 아니라 외부에서 주입받아서 사용한다.
결론
- 스프링은 이런 의존성 주입 과정을 컨테이너가 자동으로 처리해주기 때문에 개발자는 비즈니스 로직에만 집중하면 된다.
- → 위의 예시에서는 내가 스프링 컨테이너의 역할이다.
- 의존성 주입은 객체 간의 결합도를 낮추고, 유연한 애플리케이션 설계가 가능하게 한다.
'Backend > SpringBoot' 카테고리의 다른 글
| Spring Boot에서 일관된 API 응답을 위한 예외 처리 전략 (0) | 2025.03.27 |
|---|---|
| Spring Event (이벤트 발행과 구독 ..) (0) | 2024.08.27 |