[flutter] get_it를 사용하여 코드의 가독성과 유지보수성을 향상시킬 수 있는 방법은?

get_it은 Flutter에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있는 패키지입니다. 이를 사용하면 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

1. 의존성 주입(Dependency Injection)의 개요

의존성 주입은 객체 간의 의존 관계를 소스 코드 안에서 명시적으로 표현하는 설계 패턴입니다. 이를 통해 객체 간 결합도를 낮추고 재사용성을 높이는데 도움이 됩니다. Flutter에서는 get_it 패키지를 통해 의존성 주입을 쉽게 구현할 수 있습니다.

2. get_it 패키지 설치

먼저, pubspec.yaml 파일에 get_it 패키지를 추가해야 합니다. 다음과 같이 의존성을 추가합니다:

dependencies:
  get_it: ^7.1.3

3. Singleton 등록

get_it를 사용하여 Singleton 객체를 등록하면 해당 객체를 코드 어디서든 사용할 수 있습니다. 예를 들면, 앱의 테마 설정을 담당하는 ThemeService라는 Singleton 객체를 만들어볼 수 있습니다.

import 'package:get_it/get_it.dart';

class ThemeService {
  ThemeMode currentTheme = ThemeMode.light;

  void toggleTheme() {
    currentTheme = currentTheme == ThemeMode.light
        ? ThemeMode.dark
        : ThemeMode.light;
  }
}

void main() {
  GetIt.instance.registerSingleton(ThemeService());
  runApp(MyApp());
}

위의 코드에서 GetIt.instance.registerSingleton(ThemeService())를 통해 ThemeService 객체를 등록합니다.

4. 의존성 주입 사용

이제 등록한 Singleton 객체를 필요로 하는 다른 클래스에서 의존성 주입을 통해 사용할 수 있습니다. 예를 들어 앱 바닥 글 색상을 설정하는 Footer위젯은 ThemeService 객체를 필요로 합니다. 이를 get_it을 이용하여 의존성을 주입해줄 수 있습니다.

import 'package:get_it/get_it.dart';

class Footer extends StatelessWidget {
  final ThemeService themeService = GetIt.instance<ThemeService>();

  @override
  Widget build(BuildContext context) {
    return Container(
      color: themeService.currentTheme == ThemeMode.light
          ? Colors.white
          : Colors.black,
      child: Text(
        'Footer text',
        style: TextStyle(
          color: themeService.currentTheme == ThemeMode.light
              ? Colors.black
              : Colors.white,
        ),
      ),
    );
  }
}

위 코드에서 GetIt.instance<ThemeService>()를 통해 등록한 Singleton 객체를 가져와서 사용합니다.

5. 코드 가독성과 유지보수성 향상

get_it를 사용하면 의존성을 주입하는 부분과 사용하는 부분을 명확히 구분하여 코드의 가독성을 높일 수 있습니다. 또한, 의존성이 변경되거나 추가될 경우 해당 부분만 수정하면 되므로 유지보수성도 향상됩니다.

6. 참고 자료