[flutter] 플러터에서 Singleton 패턴과 Injectable의 활용 방법

목차

Singleton 패턴

싱글톤이란

싱글톤 패턴은 오직 하나의 객체만 생성되고 이 객체를 여러 곳에서 공유하여 사용하는 디자인 패턴입니다. 플러터 앱에서는 여러 곳에서 공유되는 객체의 경우 싱글톤 패턴을 사용하여 객체를 생성하고 접근하는 것이 효율적입니다.

싱글톤 클래스 구현

플러터에서 싱글톤 패턴을 구현하는 가장 간단한 방법은 클래스 변수를 사용하는 것입니다. 아래는 싱글톤 패턴을 적용한 클래스의 예시입니다.

class MySingleton {
  static MySingleton _instance;

  factory MySingleton() {
    if (_instance == null) {
      _instance = MySingleton._();
    }
    return _instance;
  }

  MySingleton._();

  // 싱글톤 클래스의 기능 및 변수 구현
}

싱글톤 사용 예시

싱글톤 클래스를 사용하는 예시는 다음과 같습니다.

MySingleton singleton = MySingleton();
MySingleton anotherSingleton = MySingleton();

print(identical(singleton, anotherSingleton)); // true

위의 예시에서는 MySingleton 클래스의 인스턴스를 두 번 생성했지만, 두 개의 인스턴스가 동일한 것을 확인할 수 있습니다. 이는 싱글톤 패턴이 제대로 동작하고 있다는 것을 보여줍니다.

Injectable 사용 방법

Injectable 라이브러리 설치

injectable은 플러터에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이를 사용하기 위해서는 injectable 패키지를 프로젝트에 추가해야 합니다.

dependencies:
  injectable: ^1.4.4
  get_it: ^6.0.0
  // 필요한 다른 패키지들

Injectable 설정 파일 작성

프로젝트에 injectable 설정 파일을 작성해야 합니다. 이 파일에서는 의존성 주입을 위한 모듈들을 설정합니다. 예시로 app_module.dart 파일을 생성하고, 아래와 같이 작성합니다.

import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';

import 'app_module.config.dart';

final GetIt getIt = GetIt.instance;

@injectableInit
void configureDependencies() => $initGetIt(getIt: getIt);

의존성 주입 예시

의존성 주입을 사용하기 위해 @injectable 애노테이션을 클래스에 추가해야 합니다. 아래는 ExampleService라는 클래스에 @injectable 애노테이션을 추가한 예시입니다.

import 'package:injectable/injectable.dart';

@injectable
class ExampleService {
  // 클래스의 기능 및 변수 구현
}

의존성 주입을 이용하여 객체를 생성하려면, 해당 객체를 필요로 하는 클래스의 생성자에서 매개변수로 받으면 됩니다. 예를 들어, MyHomePage 클래스에서 ExampleService 객체를 사용하려면 아래와 같이 작성합니다.

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

@injectable
class MyHomePage extends StatelessWidget {
  final ExampleService exampleService;

  const MyHomePage(this.exampleService);

  // 위젯 구성 및 기능 구현
}

이제 플러터 앱에서 이 객체를 사용할 수 있게 되었습니다.

참고 자료