[flutter] get_it를 사용하여 앱의 다양한 레이어 간의 의존성 주입을 어떻게 처리하는가?

앱 개발 중에는 다양한 레이어 간의 코드 재사용성과 유지 보수성을 높이기 위해 의존성 주입(Dependency Injection)이 필요하다. Flutter에서는 이를 쉽게 처리하기 위해 get_it 패키지를 사용할 수 있다.

get_it은 의존성 주입을 위한 간단하고 가벼운 패키지로, 상위 수준의 서비스를 레지스트리에 등록하고 이를 하위 수준의 구성 요소에서 쉽게 사용할 수 있도록 도와준다. 아래는 get_it를 사용하여 앱의 다양한 레이어 간의 의존성 주입을 처리하는 예시 코드이다.

get_it 패키지 설치하기

get_it 패키지를 사용하기 위해 먼저 pubspec.yaml 파일에 해당 패키지를 추가해야 한다. 예를 들어, dependencies 섹션에 다음과 같이 추가할 수 있다.

dependencies:
  get_it: ^4.0.4

이후 터미널에서 flutter packages get 명령어를 실행하여 패키지를 설치한다.

의존성 주입 처리하기

의존성 주입을 처리하기 위해 먼저 앱의 상위 수준에서 사용되는 서비스를 get_it의 레지스트리에 등록해야 한다. 예를 들어, ApiService라는 서비스를 등록한다고 가정해보자.

import 'package:get_it/get_it.dart';

GetIt locator = GetIt.instance;

void setupLocator() {
  locator.registerLazySingleton(() => ApiService());
}

위 예시에서 registerLazySingleton은 API 서비스를 앱에서 단일 인스턴스로 사용하는 것을 의미한다. 만약 매번 새로운 인스턴스를 생성하고 싶다면 registerFactory를 사용할 수 있다.

이제 의존성 주입이 필요한 하위 수준의 구성 요소에서 get_it을 사용해 앱의 서비스를 가져올 수 있다. 예를 들어, HomePage 위젯에서 ApiService를 사용하고 싶다면 다음과 같이 처리할 수 있다.

import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

class HomePage extends StatelessWidget {
  final ApiService apiService = GetIt.instance<ApiService>();

  @override
  Widget build(BuildContext context) {
    // ApiService를 사용하는 코드 작성
  }
}

위 코드에서 GetIt.instance<ApiService>()를 사용하여 get_it 레지스트리에서 ApiService 인스턴스를 가져오고 있다. 이제 HomePage 위젯에서 ApiService를 사용할 수 있다.

결론

get_it를 사용하여 Flutter 앱의 다양한 레이어 간의 의존성 주입을 처리하는 방법을 살펴보았다. get_it은 간단하고 가벼운 패키지로, 의존성 주입을 효과적으로 처리할 수 있다. 앱 개발에서 의존성 주입이 필요한 경우, get_it 패키지를 고려해보는 것을 추천한다.

참고 자료