[java] Guice의 의존성 그래프(Dependency Graph)

Guice는 Java 애플리케이션의 종속성 주입을 관리하기 위한 경량 컨테이너입니다. 이를 통해 객체 간의 의존성을 쉽게 정의하고 관리할 수 있습니다. Guice는 의존성 그래프를 사용하여 객체 간의 의존성 관계를 시각화하고 제어합니다.

의존성 그래프란?

의존성 그래프는 애플리케이션에서 객체 간의 의존성을 나타내는 그래프입니다. 그래프의 노드는 객체이고, 간선은 객체 사이의 의존성 관계를 나타냅니다. 각 객체는 생성자 인수, 필드나 메소드 인젝션을 통해 의존성을 가져올 수 있습니다.

Guice를 사용한 의존성 그래프 생성

Guice를 사용하여 의존성 그래프를 생성하려면 다음 단계를 따르면 됩니다.

  1. 의존성을 가지는 클래스에 @Inject 어노테이션을 추가합니다.
  2. 의존성을 제공하는 클래스에는 @Provides 어노테이션을 추가합니다. 이를 통해 Guice에게 해당 클래스의 인스턴스를 제공할 수 있다고 알려줍니다.
  3. Injector 인스턴스를 생성하고, 의존성 그래프를 만들 때 Guice에게 요청합니다.

다음은 Guice를 사용하여 의존성 그래프를 생성하는 간단한 예시입니다.

public class Foo {
    private Bar bar;

    @Inject
    public Foo(Bar bar) {
        this.bar = bar;
    }

    public void doSomething() {
        bar.doSomethingElse();
    }
}

public class Bar {
    public void doSomethingElse() {
        // do something
    }
}

public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new AppModule());
        Foo foo = injector.getInstance(Foo.class);

        foo.doSomething();
    }
}

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        // Guice에게 의존성 관계를 알려줍니다.
        bind(Bar.class).to(BarImpl.class);
    }
}

public class BarImpl implements Bar {
    @Override
    public void doSomethingElse() {
        // do something else
    }
}

위의 예시에서는 Foo 클래스가 Bar 클래스에 의존하는 의존성 그래프를 생성합니다. Foo 클래스의 생성자에 @Inject 어노테이션을 추가하여 Guice에게 Bar 인스턴스를 주입하도록 알려줍니다.

AppModule 클래스에서는 Bar 인터페이스를 BarImpl 클래스에 바인딩하여 Guice에게 Bar 인스턴스를 제공합니다. Main 클래스에서는 Injector 인스턴스를 생성하고, Foo 클래스의 인스턴스를 가져와 doSomething() 메소드를 호출합니다.

결론

Guice를 사용하면 의존성 그래프를 쉽게 생성하고 관리할 수 있습니다. 의존성을 명시적으로 설정함으로써 애플리케이션의 구조를 개선하고 테스트하기 쉬운 코드를 작성할 수 있습니다. Guice의 의존성 그래프 기능을 사용하여 애플리케이션을 더 유연하고 확장 가능한 코드로 만들어보세요.

참고 자료