플러터(Flutter)는 구글에서 개발한 크로스플랫폼 모바일 앱 개발 프레임워크로, 다양한 디자인 패턴을 사용하여 앱을 개발할 수 있습니다. 하지만 효율적인 코드 작성과 유지 보수를 위해서는 올바른 디자인 패턴을 선택하는 것이 중요합니다.
여기서는 플러터에서 injectable
을 사용하여 의존성 주입(Dependency Injection)을 구현하는 방법에 대해 알아보겠습니다. injectable
은 플러터 앱의 구성 요소를 쉽게 관리하고 의존성 관리를 간편하게 처리할 수 있도록 도와주는 패키지입니다.
1. injectable
패키지 설치
우선, injectable
패키지를 프로젝트에 추가해야 합니다. pubspec.yaml
파일에 다음과 같이 의존성을 추가해주세요.
dependencies:
injectable: ^1.2.0
get_it: ^7.0.0
그리고 다음 명령을 실행하여 패키지를 설치하세요.
$ flutter pub get
2. 의존성 주입 설정
의존성 주입을 구현하기 위해서는 먼저 의존성 주입을 할 클래스들을 선언해야 합니다. 예를 들어, 다음과 같은 ApiService
클래스가 있다고 가정해보겠습니다.
class ApiService {
// ...
}
이제, 의존성 주입을 하려는 클래스에 @LazySingleton
, @preResolve
등의 어노테이션을 추가하여 싱글톤으로 정의할 수 있습니다.
@injectable
@LazySingleton()
class ApiService {
// ...
}
@injectable
어노테이션은 클래스가 의존성 주입 가능한 클래스임을 선언하는 역할을 합니다. @LazySingleton()
은 클래스의 인스턴스가 최초로 사용될 때 생성되며, 이후 동일한 인스턴스를 사용하는 싱글톤 패턴을 의미합니다.
3. 의존성 주입 사용
이제 의존성 주입된 클래스를 사용해볼 차례입니다.
class UserRepository {
final ApiService _apiService;
UserRepository(this._apiService);
// ...
}
UserRepository
클래스에서 ApiService
클래스를 의존성으로 주입받아 사용할 수 있습니다. 의존성 주입은 생성자를 통해 이루어지므로, 클래스를 인스턴스화 할 때 ApiService
인스턴스를 주입해주어야 합니다.
주입할 인스턴스를 제공하려면 GetIt
인스턴스를 사용합니다.
final getIt = GetIt.instance;
이제 의존성을 주입하고 싶은 곳에서 아래와 같이 인스턴스를 등록하고 사용할 수 있습니다.
getIt.registerLazySingleton(() => ApiService());
이제 UserRepository
클래스의 인스턴스 생성 시, ApiService
인스턴스가 자동으로 주입됩니다.
4. injectable
에서의 DI 종류
injectable
을 사용할 때 다양한 종류의 DI를 사용할 수 있습니다. 몇 가지 주요한 DI 종류는 다음과 같습니다.
@LazySingleton
: 최초 사용 시에만 인스턴스를 생성하는 싱글톤 패턴.@Singleton
: 의존성 매번 요청시에도 같은 인스턴스를 사용하는 싱글톤 패턴.@FactoryMethod
: 매번 새로운 인스턴스를 반환하는 팩토리 메서드 패턴.@preResolve
: 앱 시작 시점에서 미리 인스턴스를 초기화하는 패턴.
5. 결론
플러터에서 injectable
을 사용하여 의존성 주입을 구현하면 코드의 유지 보수성과 테스트 용이성을 향상시킬 수 있습니다. 앱을 개발할 때 적절한 디자인 패턴을 선택하고 injectable
을 통해 의존성 주입을 구현하는 것을 고려해보세요.