본문 바로가기
Flutter/Package

플러터에서 get_it 패키지 사용 방법과 옵션 쉽게 이해하기 [의존성 주입]

by Maccrey Coding 2024. 9. 12.
728x90
반응형

 

Flutter 개발에서 의존성 주입은 애플리케이션의 구조를 효율적으로 관리하고, 코드의 재사용성과 테스트 가능성을 높이는 데 중요한 역할을 합니다.

get_it 패키지는 이러한 의존성 주입을 간편하게 도와주는 도구입니다.

이번 블로그에서는 get_it 패키지를 Flutter 프로젝트에 적용하는 방법과 주요 옵션에 대해 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

1. get_it 패키지란?

get_it은 Dart와 Flutter에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 패키지입니다.

의존성 주입이란 객체가 다른 객체를 필요로 할 때, 이 의존성을 외부에서 주입하는 방법입니다.

get_it을 사용하면 객체를 전역적으로 관리하고, 애플리케이션의 어디에서든 쉽게 접근할 수 있습니다.

2. get_it 설치 및 설정

2.1. 패키지 설치하기

먼저, Flutter 프로젝트의 pubspec.yaml 파일에 get_it 패키지를 추가합니다.

pubspec.yaml 파일의 dependencies 섹션에 다음을 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  get_it: ^8.0.0

그리고 터미널에서 pub get 명령어를 실행하여 패키지를 설치합니다.

flutter pub get

2.2. 패키지 초기화

get_it을 사용하기 전에 패키지를 초기화해야 합니다. 주로 애플리케이션이 시작할 때 초기화하는 것이 좋습니다. 이를 위해 main.dart 파일에 다음 코드를 추가합니다.

main.dart

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

// 서비스 클래스 정의
class MyService {
  void doSomething() {
    print("Service is doing something");
  }
}

// GetIt 인스턴스 생성
final GetIt getIt = GetIt.instance;

void setup() {
  // MyService를 싱글톤으로 등록
  getIt.registerSingleton<MyService>(MyService());
}

void main() {
  setup(); // 초기화 호출
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final myService = getIt<MyService>(); // MyService 인스턴스 가져오기

    return Scaffold(
      appBar: AppBar(
        title: Text("get_it 패키지 사용 예제"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            myService.doSomething(); // 서비스 메소드 호출
          },
          child: Text("서비스 호출"),
        ),
      ),
    );
  }
}

3. get_it 주요 옵션과 사용 방법

3.1. 싱글톤 객체 등록

싱글톤 패턴은 클래스의 인스턴스가 애플리케이션 전체에서 하나만 존재하도록 하는 방법입니다. get_it에서 싱글톤 객체를 등록하려면 registerSingleton 메소드를 사용합니다.

getIt.registerSingleton<MyService>(MyService());

이렇게 등록된 객체는 getIt<MyService>()를 통해 애플리케이션의 어디에서든 접근할 수 있습니다.

3.2. 팩토리 객체 등록

팩토리 객체는 클래스의 인스턴스를 필요할 때마다 새로 생성하는 방법입니다. registerFactory 메소드를 사용하여 팩토리 객체를 등록할 수 있습니다.

getIt.registerFactory<MyService>(() => MyService());

이 경우 getIt<MyService>()를 호출할 때마다 새로운 MyService 인스턴스가 생성됩니다.

3.3. 지연 초기화

지연 초기화는 객체를 처음 사용될 때까지 생성하지 않는 방법입니다. registerLazySingleton 메소드를 사용하여 지연 초기화를 구현할 수 있습니다.

getIt.registerLazySingleton<MyService>(() => MyService());

이렇게 등록된 객체는 실제로 필요한 시점에만 생성됩니다.

4. 의존성 주입을 활용한 코드 예제

의존성 주입을 사용하면 코드의 결합도를 낮추고 테스트를 쉽게 할 수 있습니다. 아래는 get_it을 사용하여 Flutter 위젯에서 서비스에 접근하는 방법을 보여주는 예제입니다.

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

class MyService {
  void doSomething() {
    print("Service is doing something");
  }
}

final GetIt getIt = GetIt.instance;

void setup() {
  getIt.registerSingleton<MyService>(MyService());
}

void main() {
  setup();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final myService = getIt<MyService>();

    return Scaffold(
      appBar: AppBar(
        title: Text("get_it 패키지 사용 예제"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            myService.doSomething();
          },
          child: Text("서비스 호출"),
        ),
      ),
    );
  }
}

이 예제에서 MyService는 애플리케이션 전체에서 하나의 인스턴스만 존재하며, 버튼을 눌렀을 때 doSomething 메소드가 호출됩니다.

 

 

get_it 패키지는 Flutter 애플리케이션에서 의존성 주입을 간편하게 관리할 수 있도록 도와주는 유용한 도구입니다.

싱글톤 객체, 팩토리 객체, 지연 초기화 등 다양한 방법으로 객체를 등록하고, 애플리케이션의 어느 곳에서든 쉽게 접근할 수 있습니다.

이 블로그를 통해 get_it 패키지를 활용한 의존성 주입의 기본 개념과 사용 방법을 이해하는 데 도움이 되었기를 바랍니다. 추가적인 질문이 있다면 댓글로 남겨주세요!

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

728x90
반응형