[flutter] 플러터에서 Injectable을 사용한 애플리케이션 개발 방법

이번 블로그 포스트에서는 플러터(Flutter) 애플리케이션 개발에서 Injectable을 사용하는 방법에 대해 알아보겠습니다. Injectable은 의존성 주입(Dependency Injection)을 편리하게 사용할 수 있게 도와주는 라이브러리입니다.

의존성 주입(Dependency Injection)이란?

의존성 주입은 소프트웨어 디자인 패턴 중 하나로, 객체 간의 의존 관계를 외부에서 관리하고 주입하는 방식을 말합니다. 의존성 주입을 사용하면 코드 일부분의 의존성을 변경하는 것이 쉽고, 모듈성과 재사용성이 높은 코드를 작성할 수 있습니다.

플러터에서 Injectable 사용하기

Injectable을 플러터 프로젝트에서 사용하기 위해서는 다음 단계를 따르면 됩니다.

  1. pubspec.yaml 파일에 injectable_generatorinjectable 의존성을 추가합니다.
    dev_dependencies:
      injectable_generator: ^1.0.0
      injectable: ^1.0.0
    
  2. main.dart 파일에서 import 'package:injectable/injectable.dart';을 추가합니다.

  3. main() 함수 앞에 @injectable 어노테이션을 추가합니다.
    @injectable
    void main() {
      runApp(MyApp());
    }
    
  4. 의존성 주입할 객체들을 정의합니다. 예를 들어, MyService를 주입 가능한 객체로 만들기 위해 @injectable 어노테이션을 추가합니다.
    @injectable
    class MyService {
      // ...
    }
    
  5. @module 어노테이션을 추가하여 의존성 주입할 객체들의 모듈을 선언합니다. 예를 들어, ServiceModule이라는 모듈을 생성하여 MyService를 포함시킬 수 있습니다.
    @module
    abstract class ServiceModule {
      @lazySingleton
      MyService get myService => MyService();
    }
    
  6. injectable 패키지에서 생성된 코드를 실행하여 의존성 주입을 초기화합니다. 터미널에서 flutter packages pub run build_runner build 명령어를 실행합니다.

이제 플러터 애플리케이션에서 MyService를 필요로 하는 클래스에서 @inject 어노테이션을 사용하여 의존성을 주입받을 수 있습니다.

@Injectable()
class MyWidget extends StatelessWidget {
  final MyService _myService;

  MyWidget(this._myService);

  // ...
}

이렇게 하면 MyWidget 클래스에서 _myService 의존성을 주입받을 수 있습니다.

Injectable을 사용하면 플러터 애플리케이션의 의존성 주입을 더욱 쉽고 편리하게 관리할 수 있습니다. 상황에 맞게 의존성 주입을 적용하여 코드의 모듈성과 유연성을 높일 수 있습니다.

더 자세한 내용과 사용 예제는 Injectable 패키지의 공식 문서를 참고하시기 바랍니다.