반응형
프로그래밍을 하다 보면 '의존성 주입(DI)'이라는 단어를 자주 듣게 되죠.
특히 Spring Framework를 공부하는 분들이라면 절대 피해갈 수 없는 개념입니다!
이번 포스팅에서는 DI가 뭔지, 왜 써야 하는지, 그리고 실제 예시 코드를 통해 이해를 도와드릴게요.
예제도 있으니 복붙해서 바로 실습 가능! 😎
📌 의존성 주입(DI)이란?
DI(Dependency Injection) 는 말 그대로 의존성을 외부에서 주입하는 방식이에요.
객체가 다른 객체를 직접 생성하지 않고, 외부에서 주입받아 사용하는 것을 의미합니다.
🧠 쉽게 말하면, 클래스 안에서 직접 new를 써서 객체를 만들지 않고, 필요한 걸 외부에서 "넣어주는" 구조!
🤔 왜 DI를 써야 할까?
- ✅ 유지보수 용이: 객체 간의 결합도가 낮아지므로 코드 변경에 유연해짐
- ✅ 테스트 편리: Mock 객체를 주입하여 단위 테스트 가능
- ✅ 유연한 설계: 의존성을 쉽게 교체할 수 있음
🧪 예제 코드 – 직접 써보자!
👎 의존성 주입을 사용하지 않은 경우
public class Car {
private Engine engine;
public Car() {
this.engine = new Engine(); // 직접 생성
}
public void drive() {
engine.start();
System.out.println("자동차가 출발합니다!");
}
}
이런 구조는 Car가 Engine에 강하게 의존하고 있어 테스트도 어렵고 재사용도 불편해요.
👍 의존성 주입을 사용하는 경우 (생성자 주입)
public class Car {
private Engine engine;
// 생성자를 통해 주입받음
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("자동차가 출발합니다!");
}
}
이제 Car는 Engine에 대해 잘 몰라도 됩니다.
외부에서 어떤 구현체를 넣어줄지에 따라 동작이 달라질 수 있어요!
☕ Spring에서의 DI 사용 예시
@Component
public class Engine {
public void start() {
System.out.println("엔진이 시동을 겁니다.");
}
}
@Component
public class Car {
private final Engine engine;
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("자동차 출발!");
}
}
@Autowired 로 자동 주입! Spring이 알아서 Engine 빈을 찾아 넣어줍니다.
🎬 이미지/영상 추천
- DI 개념 구조도 이미지
👉 "Dependency Injection" 다이어그램 이미지 - YouTube 강의 추천
🔍 "스프링 입문 - 의존성 주입이란?" 같은 키워드로 검색해보세요!
예: 인프런 김영한 스프링 강의 중 DI 설명 부분
🧑💻 이런 분들에게 추천해요!
- 스프링 프레임워크를 막 공부하기 시작한 개발자
- 테스트 가능한 코드 구조를 고민 중인 분
- 객체 지향 설계의 원칙을 배우고 싶은 분
🧾 결론
DI(의존성 주입) 는 단순한 개념 같지만, 코드의 유연성과 유지보수성을 크게 향상시켜주는 핵심 설계 원칙입니다.
처음에는 어렵게 느껴질 수 있지만, 직접 구현하고 연습해보면 금방 익숙해져요!
반응형
'IT 기록 > Spring' 카테고리의 다른 글
📚 JPA 완전 정복! – 객체와 데이터베이스를 연결하는 마법 (0) | 2025.04.02 |
---|