[flutter] Injectable을 사용하여 플러터 앱의 데이터 흐름 제어하기

이 글에서는 Flutter 앱에서 데이터 흐름을 제어하기 위해 Injectable이라는 패키지를 사용하는 방법에 대해 알아보겠습니다.

개요

앱 개발 과정에서 데이터 흐름은 매우 중요합니다. 데이터의 상태를 관리하고, 다른 모듈 사이에서 데이터를 전달하는 것은 깔끔하고 효율적인 코드를 작성하기 위해 필수적입니다. Injectable을 사용하면 이러한 데이터 흐름 제어를 쉽게 구현할 수 있습니다.

Injectable이란?

Injectable은 Flutter 앱에서 의존성 주입(Dependency Injection)을 쉽게 구현하기 위한 패키지입니다. 의존성 주입은 객체가 다른 객체에게 필요한 의존성을 제공하는 디자인 패턴으로, 코드의 유연성과 재사용성을 높여줍니다.

설치

먼저, 프로젝트의 pubspec.yaml 파일에 Injectable 패키지를 추가해야 합니다. 이를 위해 다음과 같이 dependencies 섹션에 injectable 패키지를 추가합니다:

dependencies:
  injectable: ^1.4.0

그리고 패키지를 업데이트하기 위해 터미널에서 flutter pub get 명령을 실행합니다.

Injectable을 사용하기 위해 앱의 전역적으로 사용될 객체에 @injectable 어노테이션을 추가해야 합니다. 예를 들어, 다음과 같이 UserRepository 클래스에 @injectable 어노테이션을 추가합니다:

@injectable
class UserRepository {
  // ...
}

의존성 주입 설정하기

Injectable은 다양한 방법으로 의존성 주입을 설정할 수 있습니다. 가장 간단한 방법은 @singleton 어노테이션을 사용하는 것입니다. @singleton 어노테이션이 지정된 클래스는 앱 전체에서 공유될 수 있는 싱글톤 객체가 됩니다.

@singleton
class UserRepository {
  // ...
}

의존성이 있는 클래스를 주입받을 때는 해당 클래스의 타입을 생성자 인자로 선언하면 됩니다. Injectable은 알맞은 객체를 자동으로 주입해줍니다.

class UserService {
  UserService(UserRepository userRepository) {
    // ...
  }
}

주입된 객체 사용하기

Injectable을 사용하면 주입된 객체를 쉽게 사용할 수 있습니다. 주입된 객체를 사용하기 위해서는 해당 객체의 인스턴스를 얻어와야 합니다. 이를 위해서는 getIt 함수를 사용합니다.

final userRepository = getIt<UserRepository>();
userRepository.doSomething();

Injectable은 getIt 함수를 활용하여 객체를 생성하고 관리합니다.

결론

Injectable은 Flutter 앱에서 데이터 흐름을 제어하고 의존성 주입을 쉽게 구현하기 위한 강력한 도구입니다. 의존성 주입을 사용하면 코드의 유연성과 재사용성을 높일 수 있습니다. 향후 프로젝트에서 데이터 흐름을 효과적으로 관리하기 위해 Injectable을 적용해 보세요.

참고 자료