[flutter] Injectable의 원리와 장점을 활용한 플러터 앱의 성능 최적화

플러터는 모바일 앱 개발을 위한 UI 프레임워크로, 다양한 기능과 강력한 성능을 제공합니다. 그러나 대규모 앱이나 복잡한 상태 관리에는 성능 이슈가 발생할 수 있습니다. 이러한 성능 이슈를 해결하고 앱의 성능을 최적화하려면 Injectable 기술을 활용할 수 있습니다.

Injectable이란?

Injectable은 의존성 주입(Dependency Injection) 패턴을 구현하기 위한 플러터 패키지입니다. 의존성 주입은 앱의 여러 모듈 간 의존성을 느슨하게 결합시키는 패턴으로, 코드의 재사용성과 테스트 용이성을 높여줍니다.

Injectable의 장점

  1. 모듈화와 재사용성: Injectable을 사용하면 앱을 여러 모듈로 나누어 개발할 수 있으며, 각 모듈을 쉽게 재사용할 수 있습니다. 이는 코드의 가독성과 유지보수성을 향상시킵니다.

  2. 테스트 용이성: 마찬가지로 모듈화된 구조로 인해 테스트가 쉬워집니다. Injectable은 Mock 객체를 쉽게 생성하고, 의존성 주입을 통해 테스트 환경을 구축하는데 도움을 줍니다.

  3. 성능 최적화: Injectable은 의존성 주입을 사용하여 객체를 생성하고 관리하기 때문에 앱의 성능을 최적화할 수 있습니다. 의존성 주입을 통해 필요한 객체를 미리 생성하고 관리하므로, 객체 생성과 소멸에 따른 오버헤드를 줄일 수 있습니다.

Injectable의 활용 예시

import 'package:injectable/injectable.dart';

@module
abstract class AppModule {
  @lazySingleton
  ApiService provideApiService() => ApiService();

  @singleton
  UserRepository provideUserRepository(ApiService apiService) => UserRepository(apiService);
}

@lazySingleton
class ApiService {
  // API 호출 및 데이터 처리 로직 구현
}

class UserRepository {
  final ApiService _apiService;

  UserRepository(this._apiService);

  // 사용자 관련 로직 및 API 호출
}

위 예시 코드에서 @module은 모듈을 정의하는 어노테이션입니다. @lazySingleton은 사용할 때 객체를 생성하고, @singleton은 최초 사용 시 객체를 생성하고 유지하며 재사용하는 어노테이션입니다. 따라서 ApiService는 앱 전체에서 단일 인스턴스로 관리되고, UserRepository는 필요한 곳에서 인스턴스를 요청 받아 사용할 수 있습니다.

참고 자료