[flutter] 플러터에서 Injectable을 사용한 의존성 주입의 핵심 원리

의존성 주입은 애플리케이션 개발 시 중요한 개념 중 하나입니다. 이를 통해 코드의 유지보수성과 테스트 용이성을 향상시킬 수 있습니다. 플러터에서도 의존성 주입을 쉽게 구현할 수 있는 Injectable 라이브러리가 있습니다. 이 글에서는 플러터에서 Injectable을 사용한 의존성 주입의 핵심 원리에 대해 알아보겠습니다.

1. Injectable이란?

Injectable은 플러터에서 의존성 주입을 위한 코드 생성 도구입니다. 이를 사용하면 의존성 주입을 위한 코드를 직접 작성할 필요 없이 어노테이션만 사용하여 의존성을 주입할 수 있습니다. Injectable은 코드를 자동으로 생성하여 의존성 주입을 처리합니다.

2. 주요 개념과 사용법

2.1. @injectable 어노테이션

Injectable을 사용하기 위해서는 먼저 주입할 클래스에 @injectable 어노테이션을 사용해야 합니다. 이 어노테이션은 해당 클래스가 의존성 주입이 가능하다는 것을 나타냅니다.

@Injectable()
class MyService {}

2.2. @Singleton 어노테이션

@Injectable 어노테이션과 함께 @Singleton 어노테이션을 사용하면 싱글톤으로 동작하는 객체를 생성할 수 있습니다. 이렇게 생성된 싱글톤 객체는 앱 전체에서 동일한 인스턴스를 사용합니다.

@Singleton()
@Injectable()
class MySingleton {}

2.3. @lazySingleton 어노테이션

@Injectable 어노테이션과 함께 @lazySingleton 어노테이션을 사용하면 필요한 시점에 객체를 생성하는 싱글톤 객체를 생성할 수 있습니다. 이렇게 생성된 싱글톤 객체는 필요한 시점에만 인스턴스를 생성합니다.

@lazySingleton
@Injectable()
class MyLazySingleton {}

2.4. 의존성 주입하기

주입받을 클래스의 생성자에 @inject 어노테이션을 사용하여 의존성을 주입받을 수 있습니다.

class MyClass {
  final MyService service;
  
  MyClass(@inject this.service);
}

이렇게 의존성을 주입받을 때에는 주입받을 클래스의 생성자에 @inject 어노테이션을 사용하기 때문에 해당 클래스를 Injectable로 등록해야 합니다.

3. 코드 생성과 사용

Injectable을 사용하여 의존성을 주입받을 때에는 코드를 생성해야 합니다. 이를 위해서는 먼저 build_runner 패키지를 설치해야 합니다.

$ flutter pub run build_runner build

이 명령어를 실행하면 주입받을 클래스에 대한 코드를 자동으로 생성해줍니다. 생성된 코드를 사용하기 위해서는 다음과 같이 import 해야 합니다.

import 'injectable.config.dart';

이후에는 생성된 코드를 통해 의존성을 주입받을 수 있습니다.

4. 결론

플러터에서 Injectable을 사용하면 의존성 주입을 편리하게 구현할 수 있습니다. 코드 생성을 통해 번거로운 작업을 줄일 수 있고, @Singleton과 @lazySingleton 어노테이션을 통해 싱글톤 객체를 쉽게 생성할 수 있습니다. Injectable을 통해 플러터 개발을 더욱 효율적이고 유지보수성 높은 코드로 작성할 수 있습니다.

참고 자료