spring

[Spring] Dependency Injection 종류

허몽구 2023. 3. 20. 18:13

저저번 게시글에서 DI에 대해 알아봤다. 오늘은 DI의 종류에 대해 포스팅하려고 한다.

DI는 약한 결합을 장려하는 설계 원칙 중 하나인데, 우선 강한 결합과 약한 결합에 알아보자.

 

- 강한 결합

강한 결합은 컴포넌트 간의 의존성이 높은 상태를 나타낸다.

한 컴포넌트가 다른 컴포넌트를 직접 생성하거나 제어하면, 두 컴포넌트는 서로 강하게 결합되며, 하나의 컴포넌트 변경이 다른 컴포넌트에 영향을 줄 수 있다. 이는 유지보수성과 재사용성을 저하시킬 수 있다.

 

- 약한 결합

약한 결합은 컴포넌트 간의 의존성을 최소화하고, 독립성을 높이는 상태를 나타낸다.

DI를 사용하면 의존성을 주입받기 때문에 컴포넌트 간의 결합도가 낮아지고, 한 컴포넌트의 변경이 다른 컴포넌트에 미치는 영향이 줄어든다.

이는 유연하고 확장 가능한 소프트웨어를 만들 수 있게 도와준다.

 

예시는 다음과 같다.

class User {
    private String name;
    private int age;
    public User() {}
}

public class Main{
    public static void main(String[] args){}
    
    public static void user1(){
        User user = new User(); // 직접 객체를 생성하므로 강한 결합
    }
    
    public static void user2(User user){
        User user2 = user; // 생성된 것을 주입받으므로 약한 결합(의존 주입)
    }
}

 

따라서 DI는 약한 결합을 실현하기 위한 방법 중 하나로 사용되며, 컴포넌트 간의 강한 결합을 피하는 데 도움이 된다.

이제 DI의 종류에 대해 알아보도록 하자.

 

1. 생성자 주입(Constructor Injection)

의존성을 클래스의 생성자를 통해 주입하는 방법이다.

클래스의 생성자 매개변수로 의존 객체를 받아들이고, 이를 내부 필드에 할당하여 사용한다.

이는 클래스의 의존성을 외부에서 주입받기 때문에 약한 결합을 실현할 수 있다.