[flutter] 플러터에서 Injectable을 사용한 디자인 패턴 선택 방법

플러터(Flutter)는 구글에서 개발한 크로스플랫폼 모바일 앱 개발 프레임워크로, 다양한 디자인 패턴을 사용하여 앱을 개발할 수 있습니다. 하지만 효율적인 코드 작성과 유지 보수를 위해서는 올바른 디자인 패턴을 선택하는 것이 중요합니다.

여기서는 플러터에서 injectable을 사용하여 의존성 주입(Dependency Injection)을 구현하는 방법에 대해 알아보겠습니다. injectable은 플러터 앱의 구성 요소를 쉽게 관리하고 의존성 관리를 간편하게 처리할 수 있도록 도와주는 패키지입니다.

1. injectable 패키지 설치

우선, injectable 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가해주세요.

dependencies:
  injectable: ^1.2.0
  get_it: ^7.0.0

그리고 다음 명령을 실행하여 패키지를 설치하세요.

$ flutter pub get

2. 의존성 주입 설정

의존성 주입을 구현하기 위해서는 먼저 의존성 주입을 할 클래스들을 선언해야 합니다. 예를 들어, 다음과 같은 ApiService 클래스가 있다고 가정해보겠습니다.

class ApiService {
  // ...
}

이제, 의존성 주입을 하려는 클래스에 @LazySingleton, @preResolve 등의 어노테이션을 추가하여 싱글톤으로 정의할 수 있습니다.

@injectable
@LazySingleton()
class ApiService {
  // ...
}

@injectable 어노테이션은 클래스가 의존성 주입 가능한 클래스임을 선언하는 역할을 합니다. @LazySingleton()은 클래스의 인스턴스가 최초로 사용될 때 생성되며, 이후 동일한 인스턴스를 사용하는 싱글톤 패턴을 의미합니다.

3. 의존성 주입 사용

이제 의존성 주입된 클래스를 사용해볼 차례입니다.

class UserRepository {
  final ApiService _apiService;
  
  UserRepository(this._apiService);

  // ...
}

UserRepository 클래스에서 ApiService 클래스를 의존성으로 주입받아 사용할 수 있습니다. 의존성 주입은 생성자를 통해 이루어지므로, 클래스를 인스턴스화 할 때 ApiService 인스턴스를 주입해주어야 합니다.

주입할 인스턴스를 제공하려면 GetIt 인스턴스를 사용합니다.

final getIt = GetIt.instance;

이제 의존성을 주입하고 싶은 곳에서 아래와 같이 인스턴스를 등록하고 사용할 수 있습니다.

getIt.registerLazySingleton(() => ApiService());

이제 UserRepository 클래스의 인스턴스 생성 시, ApiService 인스턴스가 자동으로 주입됩니다.

4. injectable에서의 DI 종류

injectable을 사용할 때 다양한 종류의 DI를 사용할 수 있습니다. 몇 가지 주요한 DI 종류는 다음과 같습니다.

5. 결론

플러터에서 injectable을 사용하여 의존성 주입을 구현하면 코드의 유지 보수성과 테스트 용이성을 향상시킬 수 있습니다. 앱을 개발할 때 적절한 디자인 패턴을 선택하고 injectable을 통해 의존성 주입을 구현하는 것을 고려해보세요.


참고: injectable documentation