소개
플러터(Flutter)는 구글에서 개발한 모바일 애플리케이션 개발 프레임워크로, Dart 언어를 사용하여 크로스 플랫폼 앱을 개발할 수 있습니다. 의존성 주입(Dependency Injection)은 플러터 애플리케이션에서 코드의 재사용성과 테스트 용이성을 높이기 위해 중요한 개념 중 하나입니다. 여기서는 플러터에서 주로 사용되는 Inject와 Injectable 라이브러리의 기능과 사용법에 대해 알아보겠습니다.
Inject
Inject는 플러터 프로젝트에서 의존성 주입을 수행하기 위한 라이브러리입니다. Inject를 사용하면 앱의 다양한 클래스 사이에서 의존성을 간편하게 주입할 수 있습니다. 주요 기능은 다음과 같습니다:
- 주입하려는 객체에 @injectable 애노테이션을 추가합니다.
- 해당 객체가 다른 객체에 의존하고 있다면, 주입하려는 객체의 생성자에 @injectable 애노테이션을 추가합니다.
- 의존성 주입이 필요한 클래스에서 inject 함수를 호출하여 주입된 객체를 얻을 수 있습니다.
사용법
-
Inject 패키지 추가
플러터 프로젝트에 Inject 패키지를 추가합니다.
pubspec.yaml
파일의 dependencies 섹션에 아래 내용을 추가합니다:dependencies: injectable: ^1.0.0
-
클래스에 @injectable 애노테이션 추가
주입하려는 클래스 위에
@injectable
애노테이션을 추가합니다.@injectable class ExampleService { // ... }
-
생성자에 @injectable 애노테이션 추가
주입하려는 클래스의 생성자 위에도
@injectable
애노테이션을 추가합니다.@injectable class ExampleService { ExampleService(); // ... }
-
의존성 주입하기
필요한 클래스에서
inject
함수를 사용하여 주입된 객체를 얻습니다.final exampleService = inject<ExampleService>();
Injectable
Injectable은 플러터에서 의존성 주입을 효과적으로 관리하기 위한 다양한 기능을 제공하는 라이브러리입니다. 주요 기능은 다음과 같습니다:
- @Injectable 애노테이션을 사용하여 클래스에 의존성 주입을 설정합니다.
- @module 애노테이션을 사용하여 클래스의 인스턴스를 모듈에 등록하고 관리합니다.
- 주입할 객체의 종류에 따라 싱글톤이나 transient 등의 라이프사이클을 설정할 수 있습니다.
Injectable은 Inject 패키지를 기반으로 한다는 점을 유의해야 합니다.
사용법
-
Injectable 패키지 추가
플러터 프로젝트에 Injectable 패키지를 추가합니다.
pubspec.yaml
파일의 dependencies 섹션에 아래 내용을 추가합니다:dependencies: injectable: ^1.0.0
-
클래스에 @Injectable 애노테이션 추가
주입하려는 클래스 위에
@Injectable
애노테이션을 추가합니다.@Injectable() class ExampleService { // ... }
-
모듈 클래스 생성
의존성 주입을 관리하기 위한 모듈 클래스를 생성합니다. 이 클래스에 @module 애노테이션을 추가하여 클래스의 인스턴스를 등록하고 관리합니다.
@module class AppModule { // ... }
-
주입하기
필요한 클래스에서
getIt
함수를 사용하여 주입된 객체를 얻습니다.final exampleService = getIt<ExampleService>();
결론
Inject와 Injectable은 플러터 애플리케이션에서 의존성 주입을 효율적으로 수행할 수 있도록 도와주는 라이브러리입니다. 이를 통해 코드의 재사용성과 테스트 용이성을 개선할 수 있습니다. 적절히 사용하여 플러터 앱 개발의 생산성을 높일 수 있습니다.