[java] Guice를 사용한 빌드 시스템 구성

Guice는 자바의 디펜던시 인젝션(Dependency Injection, DI) 프레임워크로, 객체 간의 의존성을 자동으로 주입해주는 기능을 제공합니다. 이번 포스트에서는 Guice를 사용하여 간단한 빌드 시스템을 구성하는 방법을 알아보겠습니다.

Guice란?

Guice는 구글에서 개발된 경량 DI 프레임워크입니다. Java 언어로 작성되었으며, 의존성 주입 패턴을 자동으로 처리해줍니다. Guice는 어노테이션 기반의 설정을 사용하여 객체 간의 의존성을 결정하고 관리합니다.

프로젝트 설정

먼저 Maven이나 Gradle을 사용하여 프로젝트를 설정합니다. Guice를 사용하기 위해 다음과 같은 의존성을 추가해야 합니다.

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.3</version>
</dependency>

또한, 프로젝트에는 Guice 모듈을 정의하는 클래스가 필요합니다. 이 클래스는 com.google.inject.AbstractModule을 상속받아 구현합니다. 예를 들어, MyModule 클래스를 생성하여 다음과 같이 설정할 수 있습니다.

import com.google.inject.AbstractModule;

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        // 의존성 바인딩 설정
    }
}

위 클래스에서는 configure 메서드를 오버라이딩하여 의존성 바인딩을 정의합니다. 이 메서드에서는 bind()를 사용하여 의존성을 바인딩하고, 필요한 인스턴스를 제공하는 메서드를 호출합니다.

의존성 주입 설정

Guice를 사용하여 의존성 주입을 설정하기 위해서는 다양한 어노테이션을 사용할 수 있습니다. 가장 기본적인 어노테이션은 @Inject입니다. 이 어노테이션을 필드, 생성자, 메서드에 적용하여 Guice가 해당 객체의 의존성을 자동으로 주입하도록 지정할 수 있습니다.

public class MyClass {
    private MyDependency dependency;

    @Inject
    public MyClass(MyDependency dependency) {
        this.dependency = dependency;
    }

    @Inject
    public void setDependency(MyDependency dependency) {
        this.dependency = dependency;
    }
}

위 코드에서는 MyClass의 생성자와 setDependency 메서드에 @Inject 어노테이션을 적용하여 MyDependency 객체를 주입받습니다.

의존성 주입

의존성 주입을 받기 위해 Guice 컨테이너를 사용해야 합니다. 이를 위해서는 com.google.inject.Guice 클래스의 createInjector() 메서드를 호출하여 Injector 객체를 생성하면 됩니다. 먼저 MyModule 클래스의 인스턴스를 생성한 뒤, createInjector() 메서드의 매개변수로 전달하여 Injector 객체를 만들 수 있습니다.

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

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

        // 의존성 주입
        MyClass myClass = injector.getInstance(MyClass.class);
    }
}

위 코드에서 getInstance() 메서드를 호출하여 MyClass의 인스턴스를 가져올 수 있습니다. 이때 Guice는 MyClass의 생성자를 호출하고, 필요한 의존성을 주입하여 인스턴스를 생성합니다.

결론

이처럼 Guice를 사용하여 빌드 시스템을 구성하면 의존성 주입을 손쉽게 처리할 수 있습니다. Guice는 강력하면서도 가볍고 유연한 DI 프레임워크로, 자바 프로젝트에서 의존성 관리를 보다 효율적으로 처리할 수 있습니다.


참고: