[java] Guice를 사용한 모듈(Module) 설정

Guice는 Java에서 의존성 주입(Dependency Injection)을 위해 사용되는 매우 강력한 프레임워크입니다. Guice를 사용하면 모듈(Module)을 설정하여 애플리케이션의 의존성을 관리할 수 있습니다.

Guice 모듈(Module) 생성

Guice의 핵심 개념 중 하나는 모듈(Module)입니다. 모듈은 의존성을 바인딩하고 프로바이더를 구성하는 역할을 합니다. 모듈은 com.google.inject.AbstractModule을 상속받아 작성할 수 있습니다.

import com.google.inject.AbstractModule;

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        // 바인딩 설정 및 프로바이더 구성
    }
}

바인딩 설정

모듈에서는 바인딩 설정을 통해 인터페이스와 구현체, 혹은 인스턴스를 연결합니다.

인터페이스와 구현체 바인딩

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MyInterface.class).to(MyImplementation.class);
    }
}

위 예시에서는 MyInterface를 사용하는 모든 코드에서 MyImplementation을 사용하도록 바인딩 설정하였습니다.

인스턴스 바인딩

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        MyInterface instance = new MyImplementation();
        bind(MyInterface.class).toInstance(instance);
    }
}

위 예시에서는 MyInterface를 사용하는 모든 코드에서 동일한 인스턴스를 사용하도록 바인딩 설정하였습니다.

프로바이더 구성

프로바이더는 객체 인스턴스를 생성하는 로직을 제공합니다. Guice는 자동으로 프로바이더를 생성하고 관리해주기 때문에 프로바이더를 직접 생성할 필요가 없습니다.

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MyInterface.class).to(MyImplementation.class);
        
        bind(MyDependency.class);
    }
}

위 예시에서는 MyImplementation 생성에 MyDependency를 필요로 하므로, Guice는 MyDependency의 인스턴스를 생성하여 MyImplementation의 생성자에 주입합니다.

Guice 모듈(Module) 설정

import com.google.inject.Guice;
import com.google.inject.Injector;

public class MyApp {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new MyModule());
        MyService myService = injector.getInstance(MyService.class);
        
        // MyService 사용
    }
}

MyModule 클래스를 Guice에 등록한 후 injector.getInstance()를 통해 해당 클래스의 인스턴스를 얻을 수 있습니다. 이후 해당 인스턴스를 이용하여 필요한 기능을 사용할 수 있습니다.

결론

Guice를 사용하여 의존성 주입을 관리하는 것은 애플리케이션의 유지보수와 테스트 용이성을 향상시키는 데 큰 도움이 됩니다. 모듈(Module)을 설정하여 바인딩과 프로바이더를 구성하는 것은 Guice의 핵심 개념이며, 많은 개발자들에게 널리 사용되는 기술입니다.


참고: