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

플러터는 크로스 플랫폼 모바일 애플리케이션 개발을 위한 인기있는 프레임워크입니다. 모바일 애플리케이션을 개발할 때 모듈화는 코드의 재사용성과 유지보수성을 높이는 중요한 요소입니다. 이번 글에서는 플러터에서 Injectable을 사용하여 모듈화 애플리케이션을 개발하는 방법을 알아보겠습니다.

1. Injectable이란?

Injectable은 플러터에서 의존성 주입을 쉽게 구현할 수 있도록 도와주는 패키지입니다. Dependency Injection (의존성 주입)은 클래스간의 의존성을 외부에서 주입하여 코드의 결합도를 낮추고 테스트 용이성을 높이는 디자인 패턴입니다. Injectable은 이러한 의존성 주입을 위해 플러터에서 일반적으로 사용되는 패턴을 자동으로 구현해줍니다.

2. Injectable 설치하기

Injectable 패키지를 사용하기 위해서는 프로젝트의 pubspec.yaml 파일에 의존성을 추가해야 합니다.

dependencies:
  injectable: ^1.2.2
  # Other dependencies...

의존성을 추가한 뒤, pub get 명령어를 실행하여 패키지를 설치합니다.

3. 모듈 정의하기

Injectable을 사용하여 모듈을 정의하는 방법은 간단합니다. 의존성 주입을 원하는 클래스에 @Injectable() 어노테이션을 추가합니다. 예를 들어, ApiService 클래스를 의존성 주입 대상으로 지정하고 싶다면 다음과 같이 작성합니다.

import 'package:injectable/injectable.dart';

@Injectable()
class ApiService {
  // ApiService implementation...
}

위와 같이 @Injectable() 어노테이션을 추가해주면 Injectable은 해당 클래스에 대한 싱글톤 인스턴스를 자동으로 생성합니다.

4. 의존성 주입하기

의존성을 주입받고자 하는 클래스에서는 @lazyInject 어노테이션을 사용하여 해당 의존성을 주입받을 수 있습니다. 예를 들어, UserService 클래스에서 ApiService를 사용하기 위해서는 다음과 같이 작성합니다.

import 'package:injectable/injectable.dart';

@lazyInject
class UserService {
  final ApiService _apiService;

  UserService(this._apiService);
  
  // UserService implementation...
}

위와 같이 @lazyInject 어노테이션을 사용하여 _apiService 멤버 변수를 주입받을 수 있습니다.

5. 모듈 설정하기

Injectable을 사용하면서 추가적으로 모듈을 설정하고 싶다면 @module 어노테이션을 사용하여 설정 클래스를 만들 수 있습니다. 설정 클래스에는 모듈의 설정 정보와 의존성 주입 방법을 정의할 수 있습니다.

import 'package:injectable/injectable.dart';
import 'package:http/http.dart' as http;

@Module()
abstract class AppModule {
  @singleton
  http.Client get httpClient => http.Client();
  
  // Other module configurations...
}

위와 같이 @Module() 어노테이션을 사용하여 AppModule을 정의하고, @singleton 어노테이션을 사용하여 의존성을 싱글톤으로 설정할 수 있습니다.

6. 애플리케이션 시작하기

Injectable을 사용한 모듈화된 애플리케이션을 실행하기 위해서는 setupLocator() 메서드를 호출하여 의존성 주입을 초기화해야 합니다. 예를 들어, main.dart 파일에서 다음과 같이 설정합니다.

import 'package:injectable/injectable.dart';

void main() {
  setupLocator();
  runApp(MyApp());
}

위와 같이 setupLocator() 메서드를 호출한 뒤 애플리케이션을 실행하면 Injectable 패키지가 의존성 주입을 자동으로 처리해줍니다.

결론

이번 글에서는 플러터에서 Injectable을 사용하여 모듈화된 애플리케이션을 개발하는 방법에 대해 알아보았습니다. Injectable을 사용하면 코드의 재사용성과 유지보수성을 높이는 동시에 테스트 용이성도 개선할 수 있습니다. 모듈 정의, 의존성 주입 및 설정 등 Injectable의 다양한 기능을 사용하여 효율적인 플러터 애플리케이션을 개발해보세요.