[flutter] Injectable을 사용하여 코드에 유연성을 추가하는 방법

앱을 개발하다 보면 코드의 유연성이 매우 중요합니다. 변화하는 요구사항에 대응하기 위해서는 코드를 쉽게 수정하고 확장할 수 있어야 합니다. Flutter에서는 injectable 라이브러리를 사용하여 의존성 주입을 구현하는 것이 코드의 유연성을 향상시키는 좋은 방법입니다.

1. injectable 라이브러리 설치

프로젝트의 pubspec.yaml 파일에 다음의 의존성을 추가합니다:

dependencies:
  injectable: ^any

그리고 다음 명령어를 사용하여 라이브러리를 설치합니다:

flutter pub get

2. injectable 설정

lib 폴더 내부에 injectable.dart 파일을 생성하고 아래의 내용을 추가합니다:

import 'package:injectable/injectable.dart';
import 'package:get_it/get_it.dart';

final GetIt getIt = GetIt.instance;

@InjectableInit()
void configureDependencies() => $initGetIt(getIt);

이 파일은 의존성 주입을 위한 설정을 담당합니다. configureDependencies 메소드를 호출하여 의존성 주입 컨테이너인 getIt을 초기화합니다.

3. 의존성 주입 설정

의존성 주입을 원하는 클래스의 생성자에 @injectable 어노테이션을 추가합니다. 아래는 예시입니다:

import 'package:injectable/injectable.dart';

@injectable
class MyService {
  MyService() {
    // 생성자 작업
  }
}

이렇게 하면 MyService 클래스의 인스턴스를 다른 클래스에서 주입할 수 있게 됩니다.

4. 의존성 주입 사용

의존성 주입을 사용하려면 getIt 컨테이너에서 해당 클래스의 인스턴스를 가져와야 합니다. 예를 들어 MyService 인스턴스를 가져오기 위해서는 다음과 같이 할 수 있습니다:

final myService = getIt.get<MyService>();

이제 myService 변수를 사용하여 MyService의 기능을 호출할 수 있습니다.

5. 추가 기능: Singleton

@Singleton 어노테이션을 사용하여 특정 클래스의 인스턴스를 싱글톤으로 사용할 수 있습니다. 이렇게 되면 한 번 생성된 인스턴스를 계속해서 재사용하게 됩니다. 예를 들어:

import 'package:injectable/injectable.dart';

@injectable
@singleton
class MySingletonService {
  MySingletonService() {
    // 생성자 작업
  }
}

이제 MySingletonService의 인스턴스는 항상 동일한 객체로 유지됩니다.

마무리

injectable을 사용하여 Flutter 앱의 코드에 유연성을 추가할 수 있습니다. 의존성 주입 패턴을 사용하면 코드의 수정과 확장이 용이해지며, 테스트 용이성도 향상됩니다. 간단하게 injectable 라이브러리를 설치하고 설정한 뒤, 클래스에 @injectable 어노테이션을 추가하는 것으로 의존성 주입을 구현할 수 있습니다.

더 자세한 내용은 injectable의 공식 문서에서 확인할 수 있습니다.