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