[flutter] 플러터에서 Injectable을 활용한 애플리케이션 아키텍처 구현 방법

플러터(Flutter)는 구글(Google)에서 개발한 UI 프레임워크로, 단일 코드베이스에서 iOS와 Android 애플리케이션을 동시에 개발할 수 있는 장점을 가지고 있습니다. 이러한 장점을 활용하기 위해서는 효율적이고 확장 가능한 애플리케이션 아키텍처를 구현하는 것이 중요합니다.

이번 포스트에서는 플러터에서 Injectable이라는 라이브러리를 활용하여 애플리케이션 아키텍처를 구현하는 방법에 대해 알아보겠습니다.

1. Injectable 소개

Injectable은 플러터에서 의존성 주입(Dependency Injection)을 편리하게 구현할 수 있도록 도와주는 라이브러리입니다. 의존성 주입은 애플리케이션의 컴포넌트 간의 결합도를 낮추고 코드의 재사용성과 유지보수성을 향상시키는데 도움을 줍니다.

Injectable은 코드 제너레이터(Generator)를 활용하여 의존성 주입을 자동으로 생성해주는 기능을 제공합니다. 이를 통해 개발자는 더욱 간편하게 의존성 주입을 구현할 수 있습니다.

2. 사용 방법

2.1. 의존성 주입 설정

먼저 pubspec.yaml 파일에 injectable 라이브러리를 추가합니다:

dependencies:
  flutter:
    sdk: flutter
  injectable: ^2.0.0

그다음, main.dart 파일에서 configureInjection 함수를 호출하여 의존성 주입을 설정합니다:

import 'package:injectable/injectable.dart';
import 'injection.config.dart';

void main() {
  configureInjection(Environment.prod);
  runApp(MyApp());
}

2.2. 의존성 주입 정의

의존성 주입을 사용하기 위해 @Injectable() 어노테이션을 클래스에 추가합니다. 아래 예시는 AuthService 클래스에서 @Injectable() 어노테이션을 추가하는 예제입니다:

import 'package:injectable/injectable.dart';

@Injectable()
class AuthService {
  // ...
}

2.3. 의존성 주입 사용

의존성 주입을 사용하려는 클래스에서 @injectable 어노테이션을 사용하여 필요한 의존성을 주입받습니다. 아래 예시는 LoginScreen 클래스에서 AuthService를 의존성으로 주입받는 예제입니다:

import 'package:injectable/injectable.dart';

@injectable
class LoginScreen extends StatefulWidget {
  final AuthService authService;

  LoginScreen({required this.authService});

  // ...
}

이제 LoginScreen 클래스에서 authService를 사용할 수 있습니다.

3. 결론

Injectable을 사용하면 플러터 애플리케이션에서 강력하고 효율적인 의존성 주입을 구현하는 것이 쉬워집니다. 의존성 주입은 애플리케이션의 확장성과 유지보수성을 향상시키는 중요한 개념이므로, 플러터 프로젝트에 적용해 보는 것을 추천합니다.

참고 자료