본문 바로가기
IT 기록/Spring

💡 의존성 주입(DI) 완전 정복! – 개발자가 알아야 할 필수 개념

by 뚠스뚠스 2025. 4. 1.
반응형

프로그래밍을 하다 보면 '의존성 주입(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(의존성 주입) 는 단순한 개념 같지만, 코드의 유연성과 유지보수성을 크게 향상시켜주는 핵심 설계 원칙입니다.
처음에는 어렵게 느껴질 수 있지만, 직접 구현하고 연습해보면 금방 익숙해져요!

반응형