의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나입니다. 의존성 주입은 객체가 필요로 하는 의존 객체를 외부에서 제공(주입)함으로써 객체 간의 결합도를 낮춥니다.
// MessageBean 클래스
public class MessageBean {
// 생성자
public MessageBean() {}
// 메서드
public void sayHello(String name) {
System.out.println("Hello, " + name);
}
}
// HelloApp 클래스
public class HelloApp {
public static void main(String[] args) {
// MessageBean 클래스를 사용하기 위해 new 연산자를 사용하여 객체 생성
MessageBean bean = new MessageBean();
// bean의 메서드 호출
bean.sayHello("tiger");
}
}
// 출력 결과
hello, tiger
위 코드에서 HelloApp 클래스는 MessageBean 객체를 new 연산자로 직접 생성하고, 해당 객체의 메서드를 호출합니다. 이렇게 내부에서 객체를 직접 생성하는 방식은 클래스 간의 강한 결합도를 초래하게 됩니다. 이 방식의 단점은, 나중에 수정이 필요할 때 객체를 생성한 모든 클래스의 코드를 수정해야 한다는 점입니다. 인터페이스를 사용하면 결합도를 어느 정도 낮출 수 있지만, 여전히 유지보수 측면에서 한계가 있습니다.
이 문제를 해결하기 위해 등장한 것이 의존성 주입(DI)입니다. 의존성 주입을 통해 객체는 필요한 의존 객체를 직접 생성하지 않고, 외부에서 주입받게 됩니다. 이로 인해 객체는 자신의 구현에만 집중할 수 있으며, 변경에도 유연하게 대응할 수 있습니다.
의존성 주입의 장점은 다음과 같습니다:
스프링 프레임워크는 이러한 의존성 주입 기능을 제공하여 일반적으로 널리 사용됩니다.