안녕하세요! 이번에는 플러터(Flutter) 앱의 비즈니스 로직을 분리하는 방법에 대해 알아보겠습니다. 비즈니스 로직을 분리하면 코드의 가독성과 유지보수성을 높일 수 있으며, 테스트도 쉽게 진행할 수 있습니다. 이를 위해 “injectable” 패키지를 사용하겠습니다.
Injectabble 패키지란?
“injectable”은 플러터 앱에서 의존성 주입을 쉽게 구현할 수 있도록 도와주는 패키지입니다. 이를 통해 앱의 비즈니스 로직을 모듈화하고 의존성을 관리할 수 있습니다.
설치
“injectable” 패키지를 사용하기 위해서는 먼저 해당 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml
파일의 dependencies
에 다음 코드를 추가하세요:
dependencies:
injectable: ^1.0.0
그리고 터미널에서 다음 명령어를 실행하여 패키지를 설치하세요:
flutter pub get
사용 방법
1. 모듈 생성
먼저, 비즈니스 로직을 담을 모듈을 생성해야 합니다. lib
폴더 내에 di
폴더를 생성하고, di
폴더 내에 app_module.dart
파일을 생성하세요.
import 'package:injectable/injectable.dart';
@module
abstract class AppModule {}
2. 의존성 주입
이제 의존성 주입을 적용할 클래스를 생성해보겠습니다. di
폴더 내에 example_service.dart
파일을 생성하고 다음 코드를 작성하세요.
abstract class ExampleService {
void doSomething();
}
@Injectable(as: ExampleService)
class ExampleServiceImpl implements ExampleService {
@override
void doSomething() {
print("Doing something");
}
}
위의 예시에서는 ExampleService
인터페이스와 ExampleServiceImpl
클래스를 생성하고, @Injectable
어노테이션을 사용하여 의존성 주입을 적용하였습니다. ExampleServiceImpl
클래스는 ExampleService
인터페이스를 구현하며, doSomething
메소드를 오버라이드하여 로그를 출력하는 동작을 수행합니다.
3. 모듈 등록
이제 앞서 생성한 AppModule
에서 의존성을 등록해보겠습니다. AppModule
클래스에는 @module
어노테이션이 필요합니다. AppModule
내에서 configure
메소드를 생성하고 의존성을 등록합니다.
@module
abstract class AppModule {
@singleton
ExampleService get exampleService => ExampleServiceImpl();
// 추가적인 의존성 등록
}
위 예시에서는 ExampleService
를 ExampleServiceImpl
로 구현하고, @singleton
어노테이션을 사용하여 해당 의존성이 싱글톤으로 사용된다고 정의하였습니다.
4. 주입 사용
이제 앱에서 해당 의존성을 사용할 수 있습니다. 기존에 의존성을 직접 생성했던 위치를 get_it
패키지의 getIt
인스턴스를 통해 주입을 받도록 변경합니다. lib/main.dart
파일에서 다음과 같이 수정해보세요.
import 'package:injectable/injectable.dart';
void main() {
configureDependencies(Environment.prod);
runApp(MyApp());
}
@injectableInit
void configureDependencies(String environment) {
$initGetIt(Injector(environment: environment));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final exampleService = getIt.get<ExampleService>();
exampleService.doSomething();
// ...
}
}
위의 예시에서는 configureDependencies
메소드에서 의존성을 설정하고, MyApp
클래스에서 해당 의존성을 주입하여 사용하였습니다.
결론
위의 예시를 통해 “injectable” 패키지를 사용하여 플러터 앱의 비즈니스 로직을 간단히 분리하는 방법을 알아보았습니다. “injectable”을 사용하면 코드의 가독성과 유지보수성을 높여줄 뿐만 아니라, 테스트도 쉽게 진행할 수 있습니다. 이러한 장점을 활용하여 개발 효율성을 높이세요!
더 자세한 내용은 공식 문서를 참고해주세요.