플러터 앱을 개발하다보면 네트워크 연결을 다루어야 할 경우가 많이 있습니다. 이러한 상황에서 Get_it 라이브러리를 사용하면 의존성 주입(Dependency Injection, DI)을 통해 네트워크 연결을 좀 더 쉽게 다룰 수 있습니다. Get_it는 플러터에서 사용하는 대표적인 DI 라이브러리 중 하나입니다.
Get_it 라이브러리 설치
먼저 Get_it 라이브러리를 설치해야 합니다. pubspec.yaml
파일의 dependencies
섹션에 Get_it를 추가해주세요.
dependencies:
get_it: ^7.2.0
그리고 해당 프로젝트의 루트 디렉토리에서 다음 명령어를 사용하여 Get_it를 설치합니다.
flutter pub get
네트워크 서비스 클래스 생성
다음으로, 네트워크 서비스를 다루기 위한 클래스를 생성해야 합니다. network_service.dart
라는 파일을 생성하고 다음과 같이 작성해주세요.
import 'package:http/http.dart' as http;
class NetworkService {
Future<String> fetchData(String url) async {
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to fetch data');
}
}
}
이 클래스는 http
패키지를 이용하여 주어진 URL에서 데이터를 가져오는 fetchData
메서드를 제공합니다.
Get_it를 사용한 의존성 주입
Get_it를 사용하여 해당 서비스를 의존성으로 주입하는 방법을 알아보겠습니다.
1. Get_it 서비스 레지스트리 생성하기
get_it.dart
라는 파일을 생성하고 다음과 같이 작성해주세요.
import 'package:get_it/get_it.dart';
import 'network_service.dart';
GetIt locator = GetIt.instance;
void setupLocator() {
locator.registerLazySingleton<NetworkService>(() => NetworkService());
}
위 코드는 Get_it의 서비스 레지스트리를 초기화하고 NetworkService
를 등록해주는 코드입니다.
2. Get_it 서비스 레지스트리 설정하기
앱의 진입점인 main.dart
파일을 열고 다음과 같이 수정해주세요.
import 'package:flutter/material.dart';
import 'get_it.dart';
void main() {
setupLocator();
runApp(MyApp());
}
위 코드는 앱 시작 시 Get_it의 서비스 레지스트리를 설정해주는 코드입니다.
3. Get_it를 통한 서비스 사용하기
이제 네트워크 서비스를 사용하기 위해 Get_it를 이용하여 주입해보겠습니다. 예를 들어, home.dart
스크린에서 NetworkService
를 사용하고 싶다고 가정해봅시다.
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'network_service.dart';
class HomeScreen extends StatelessWidget {
final NetworkService networkService = GetIt.I<NetworkService>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
fetchDataFromNetwork();
},
child: Text('Fetch Data'),
),
),
);
}
void fetchDataFromNetwork() async {
final url = 'https://api.example.com/data';
try {
final data = await networkService.fetchData(url);
// 데이터 처리 로직 작성
} catch (e) {
print(e);
// 오류 처리 로직 작성
}
}
}
위 코드에서 GetIt.I<NetworkService>()
를 통해 Get_it에서 NetworkService
를 주입받아 사용하고 있습니다.
결론
Get_it를 사용하면 의존성 주입을 통해 플러터 앱에서 네트워크 연결을 쉽게 다룰 수 있습니다. Get_it의 서비스 레지스트리를 설정하고, 주입받을 서비스를 등록한 다음 필요한 곳에서 해당 서비스를 사용하면 됩니다. 이를 통해 애플리케이션의 유연성과 테스트 용이성을 향상시킬 수 있습니다.
참고자료: