Injectable 클래스는 Flutter 앱에서 의존성 주입을 지원하기 위해 사용되는 클래스입니다. 이 클래스는 앱의 라이프사이클에 따라 생성되고 소멸됩니다. 이번 글에서는 Injectable 클래스의 라이프사이클에 대해 알아보겠습니다.
Injectable 클래스의 생성
Injectable 클래스는 주로 앱이 시작되고 종료될 때 생성하고 소멸시킵니다. 이는 주로 앱의 main
함수와 함께 사용됩니다. 다음은 Injectable 클래스의 생성 예시입니다.
@LazySingleton(as: MyService)
class MyServiceImpl extends MyService {}
void main() {
configureInjection(Environment.prod);
runApp(MyApp());
}
위 예시에서 MyServiceImpl
은 MyService
인터페이스의 구현체로, 앱의 전체 라이프사이클 동안 생성 및 소멸됩니다. configureInjection
함수는 앱의 주입 설정을 초기화하는 역할을 합니다.
주입된 객체의 생명주기 관리
Injectable 클래스는 일반적으로 주입되는 객체의 생명주기와 동일한 방식으로 관리됩니다. 다음은 몇 가지 주입된 객체의 예시입니다.
@Singleton
: 앱의 전체 라이프사이클 동안 단일 인스턴스를 유지합니다.@LazySingleton
: 첫 번째로 요청 시에만 인스턴스를 생성하고 유지합니다.@Scoped
: 특정 범위에 해당하는 객체의 생명주기를 관리합니다. 예를 들어, 각 화면마다 독립적인 인스턴스를 유지할 수 있습니다.@PreScoped
: 미리 정의된 범위에 해당하는 객체의 생명주기를 관리합니다. 예를 들어, 로그인된 사용자의 세션마다 독립적인 인스턴스를 유지할 수 있습니다.
주입된 객체 사용 예시
주입된 객체를 사용하기 위해서는 해당 객체의 인스턴스를 참조할 수 있어야 합니다. 이를 위해 lazySingleton
함수를 사용해 주입된 객체를 가져올 수 있습니다. 다음은 주입된 객체를 사용하는 예시입니다.
class MyApp extends StatelessWidget {
final MyService myService = getIt<MyService>();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
myService.doSomething();
},
child: Text('Click me'),
),
),
),
);
}
}
위 예시에서 getIt<MyService>()
함수를 호출하여 MyService
인스턴스를 가져옵니다. 이후에는 해당 인스턴스를 사용하여 원하는 작업을 수행할 수 있습니다.
결론
Injectable 클래스는 Flutter 앱에서 의존성 주입을 간편하게 처리할 수 있도록 도와줍니다. 클래스의 생성 및 소멸은 앱의 라이프사이클에 맞춰 관리되며, 주입된 객체의 생명주기를 세밀하게 제어할 수 있습니다. 이를 통해 앱의 유연성과 가독성을 향상시킬 수 있습니다.
자세한 내용은 Injectable GitHub 페이지를 참고하십시오.