[flutter] 플러터에서 Injectable을 사용한 애플리케이션 아키텍처 디자인 패턴

애플리케이션 아키텍처 디자인은 소프트웨어 개발에서 매우 중요한 요소입니다. 이를 효과적으로 구현하기 위해 Dependency Injection(DI)은 매우 유용한 도구입니다. DI를 사용하면 의존성을 주입하고 모듈을 쉽게 교체할 수 있으며, 테스트와 확장성도 용이해집니다.

이번 글에서는 Flutter 애플리케이션에서 DI를 구현하기 위해 Injectable 라이브러리를 사용하는 방법을 소개하겠습니다. Injectable은 플러터 애플리케이션에서 사용할 수 있는 DI 라이브러리로, 간편한 사용법과 많은 기능을 제공합니다.

Injectable 소개

Injectable은 플러터 애플리케이션에서 DI를 구현하기 위해 사용되는 라이브러리입니다. Injectable은 코드 생성을 통해 의존성을 주입하며, 코드를 깔끔하게 유지하는 동시에 빠른 컴파일 속도를 제공합니다. 또한, Injectable은 개발자가 모듈을 정의하고 의존성을 관리할 수 있는 강력한 기능을 제공하여 애플리케이션의 아키텍처를 효율적으로 구성할 수 있습니다.

설치 및 설정

Injectable을 사용하기 위해 먼저 프로젝트에 라이브러리를 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 dependency를 추가합니다:

dependencies:
  injectable: ^1.0.0

그 다음, 터미널에서 flutter pub get 명령을 실행하여 dependency를 설치합니다.

Injectable을 설정하려면, main.dart 파일에 다음과 같이 코드를 추가합니다:

import 'package:injectable/injectable.dart';

@injectableInit
void configureDependencies() => $initGetIt();

이렇게 하면 생성된 파일을 이용하여 의존성을 주입할 수 있게 됩니다.

모듈 정의하기

Injectable을 사용하여 의존성을 주입하려면 모듈을 정의해야 합니다. 모듈은 @module 어노테이션을 사용하여 정의됩니다. 각 모듈은 @Injectable 어노테이션을 사용하여 의존성을 등록합니다.

import 'package:injectable/injectable.dart';

@module
abstract class AppModule {
  @singleton
  ApiClient get apiClient => ApiClientImpl();

  @lazySingleton
  UserRepository get userRepository => UserRepositoryImpl();
}

위 예제에서는 ApiClient 인스턴스를 singleton으로 등록하고, UserRepository 인스턴스를 lazySingleton으로 등록하였습니다. singleton은 의존성을 한 번만 생성하고 공유하며, lazySingleton은 처음 사용될 때 생성되고 이후에는 동일한 인스턴스를 반환합니다.

의존성 주입하기

의존성을 주입하기 위해 @injectable 어노테이션을 사용합니다. 예를 들어, 위에서 정의한 UserRepository를 사용하는 클래스에서 다음과 같이 주입할 수 있습니다:

import 'package:injectable/injectable.dart';

@injectable
class UserService {
  final UserRepository userRepository;

  UserService(this.userRepository);
}

위 예제에서는 UserService 클래스가 UserRepository에 의존하고 있으며, @injectable 어노테이션을 통해 의존성 주입을 표시하고 있습니다. 이렇게 하면 UserService 인스턴스를 생성할 때 UserRepository 인스턴스가 자동으로 주입됩니다.

결론

플러터 애플리케이션에서 의존성 관리를 효과적으로 하기 위해 Injectable 라이브러리를 사용하는 방법을 살펴보았습니다. Injectable을 사용하면 DI를 간편하게 구현하고 관리할 수 있으며, 모듈 정의와 주입된 의존성을 손쉽게 제어할 수 있습니다. DI는 애플리케이션의 유지 보수성과 확장성을 향상시키는 데 매우 유용한 도구이므로, 애플리케이션 아키텍처 디자인에 적극적으로 적용해보세요.

참고 자료