[flutter] 플러터에서 Injectable을 활용하여 코드 재사용성 높이기

소개

플러터(Flutter)는 크로스 플랫폼 앱 개발을 위한 인기있는 프레임워크입니다. 앱 개발을 위해 많은 코드가 작성되는데, 이를 재사용하기 위해서는 코드 구성과 디자인 패턴에 신경써야 합니다. 이번 블로그 포스트에서는 플러터에서 Injectable을 활용하여 코드 재사용성을 높이는 방법에 대해 살펴보겠습니다.

Injectable 이란?

Injectable은 플러터에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. Injectable을 사용하면 싱글톤의 모듈을 만들고, 필요한 곳에서 의존성을 주입하여 코드의 재사용성을 높일 수 있습니다.

설치하기

Injectable을 사용하기 위해서는 먼저 의존성을 추가해야 합니다. pubspec.yaml 파일에 다음 의존성을 추가해주세요.

dependencies:
  injectable: ^1.1.1
  injectable_generator: ^1.1.1

의존성을 추가한 후에는 패키지를 설치하기 위해 다음 명령어를 실행합니다.

flutter pub get

사용 방법

Injectable을 사용하기 위해서는 다음 세 가지 단계를 따라야 합니다.

1. 인터페이스 정의하기

의존성 주입을 하기 위해 먼저 인터페이스를 정의해야 합니다. 예를 들어, 데이터베이스 작업을 수행하는 UserRepository 클래스를 만들어보겠습니다. UserRepository 클래스는 IUserRepository 인터페이스를 구현해야 합니다.

abstract class IUserRepository {
  Future<String> getUsername();
}

@LazySingleton(as: IUserRepository)
class UserRepository implements IUserRepository {
  @override
  Future<String> getUsername() async {
    await Future.delayed(Duration(seconds: 1));
    return 'John Doe';
  }
}

2. 모듈 정의하기

의존성 주입을 하기 위해 모듈을 정의해야 합니다. 모듈은 Injectable 어노테이션을 사용하여 정의할 수 있습니다. UserRepository 클래스를 사용하는 모듈은 다음과 같이 정의합니다.

@Module()
abstract class RepositoryModule {
  @lazySingleton
  IUserRepository get userRepository => UserRepository();
}

3. 주입하기

의존성 주입을 받을 곳에서 @inject 어노테이션을 사용합니다. 다음 예제는 플러터의 StatefulWidget에서 의존성을 주입하는 방법을 보여줍니다.

class MyWidget extends StatefulWidget {
  @inject
  IUserRepository? userRepository;

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

의존성을 주입했다면, 이제 UserRepository 의 메소드를 호출하여 사용할 수 있게 됩니다.

user = await widget.userRepository!.getUsername();

결론

이제 플러터에서 Injectable을 활용하여 코드의 재사용성을 높이는 방법을 알아봤습니다. Injectable을 사용하면 의존성 주입을 쉽게 구현할 수 있고, 코드의 유지보수성과 테스트 용이성을 향상시킬 수 있습니다. 의존성 주입을 사용하여 플러터 애플리케이션을 개발해보세요!