[flutter] get_it를 사용하여 플러터 앱에서 네트워크 연결을 어떻게 다루는가?

플러터 앱을 개발하다보면 네트워크 연결을 다루어야 할 경우가 많이 있습니다. 이러한 상황에서 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의 서비스 레지스트리를 설정하고, 주입받을 서비스를 등록한 다음 필요한 곳에서 해당 서비스를 사용하면 됩니다. 이를 통해 애플리케이션의 유연성과 테스트 용이성을 향상시킬 수 있습니다.


참고자료: