[flutter] 플러터에서 Inject와 Injectable을 사용한 모듈 강화

플러터는 효율적인 의존성 주입(Dependency Injection)을 지원하기 위해 다양한 패키지와 라이브러리를 제공합니다. 그 중에서도 Inject와 Injectable은 모듈을 더욱 강화시켜주는 강력한 도구입니다. 이번 글에서는 Inject와 Injectable을 사용하여 플러터의 모듈을 강화하는 방법에 대해 알아보겠습니다.

1. Inject와 Injectable 패키지란?

Inject와 Injectable은 플러터에서 의존성 주입 패턴을 구현할 수 있도록 도와주는 패키지입니다. 이 두 패키지는 get_it이라는 라이브러리와 함께 사용됩니다. get_it은 플러터에서 인스턴스를 관리하기 위한 서비스 로케이터(Service Locator) 패턴을 제공하는 패키지입니다.

Inject 패키지는 클래스 내부에 @injectable 어노테이션을 붙여 의존성 주입 대상으로 지정하는 것을 도와줍니다. Injectable 패키지는 @module 어노테이션을 사용하여 모듈을 정의하고, 모듈 내부에서 @injectable 어노테이션을 사용하여 의존성 주입을 설정하는 것을 도와줍니다.

2. Inject와 Injectable 사용하기

먼저, Inject와 Injectable을 사용하기 위해서는 아래와 같이 해당 패키지를 pubspec.yaml 파일에 추가해야 합니다.

dependencies:
  injectable: ^1.5.2
  injectable_generator: ^1.5.2
  get_it: ^5.2.1

이제 의존성 주입을 적용할 클래스에 @injectable 어노테이션을 붙입니다. 예를 들어, 다음과 같은 클래스가 있다고 가정해봅시다.

class UserRepository {
  UserRepository();
}

의존성 주입을 적용하기 위해서는 @injectable 어노테이션을 클래스에 붙여줍니다.

@Injectable()
class UserRepository {
  UserRepository();
}

같은 방법으로 의존성 주입을 적용할 수 있는 클래스들을 모두 수정합니다.

다음으로는 모듈을 정의해야 합니다. @module 어노테이션을 사용하여 모듈을 정의하고, 모듈 내부에서 @injectable 어노테이션을 사용하여 의존성 주입을 설정합니다. 아래의 예제는 UserRepository에 대한 의존성 주입을 설정하는 모듈입니다.

@module
abstract class RepositoryModule {
  @singleton
  UserRepository get userRepository => UserRepository();
}

여기서 @singleton 어노테이션은 UserRepository의 인스턴스가 한 개만 생성되도록 설정합니다.

마지막으로, main.dart 파일에서 setupLocator 함수를 호출하여 의존성 주입을 설정한 후, 필요한 모듈을 등록해줍니다.

void main() {
  setupLocator();
  // ...
}

이제 Inject와 Injectable을 사용하여 플러터의 모듈을 강화했습니다. 이를 통해 의존성 주입 패턴을 쉽고 간편하게 구현할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.

결론

Inject와 Injectable은 플러터의 모듈을 강화하기 위한 강력한 도구입니다. 이를 사용하여 효율적인 의존성 주입을 구현할 수 있으며, 코드의 가독성과 유지보수성도 높일 수 있습니다. 플러터 개발에 있어서 의존성 주입은 필수적인 요소이므로, Inject와 Injectable을 적극적으로 활용해보시기 바랍니다.

참고 자료