목차
개요
이번 블로그 포스트에서는 GetX를 사용하여 종속성을 관리하는 방법에 대해서 알아보도록 하겠습니다.
블로그 시리즈
이 블로그 포스트는 Flutter에서 GetX를 사용하는 방법에 관해 시리즈로 제작되었습니다. GetX의 다른 사용법을 알고 싶으시다면, 다음 링크를 참고하시기 바랍니다.
- [GetX] 상태 관리
- [GetX] 라우트 관리
- [GetX] 종속성 관리
- [GetX] 다국어 지원
- [GetX] 테마
- [GetX] BottomSheet
- [GetX] Dialog
- [GetX] 스낵바
- [GetX] 플랫폼 및 디바이스 정보
GetX 설치
Flutter에서 GetX의 사용법을 확인하기 위해 다음 명령어를 사용하여 Flutter의 새로운 프로젝트를 생성합니다.
flutter create dependency_management
그런 다음 명령어를 실행하여 GetX
패키지를 설치합니다.
flutter pub add get
이제 이렇게 설치한 GetX를 사용하여 종속성 관리를 하는 방법에 대해서 알아보도록 하겠습니다.
Get.put
일반적으로 GetX에서 종속성을 관리하기 위해서 다음과 같이 Get.put
을 사용합니다.
Get.put(CountController());
Get.put
으로 추가한 컨트롤러를 다음과 같이 변수에 할당하여 사용할 수 있습니다.
final controller = Get.put(CountController());
...
print(controller.count.value);
...
controller.increment();
Get.lazyPut
Get.put
을 사용하여 컨트롤러를 추가하면, 해당 코드가 실행되는 시점에 컨트롤러가 메모리에 생성되게 됩니다. 하지만 다음과 같이 Get.lazyPut
을 사용하면, 실제로 컨트롤러를 사용하는 시점에 컨트롤러가 메모리에 생성되게 됩니다.
Get.lazyPut<CountController>(() => CountController());
Get.putAsync
추가하려는 컨트롤러가 Future
를 반환하는 경우, 다음과 같이 Get.putAsync
을 사용하여 비동기 컨트롤러를 처리할 수 있습니다.
Get.putAsync<CountController>(() async => await CountController());
Get.find
Get.put
, Get.lazyPut
, Get.putAsync
을 사용하여 컨트롤러를 추가하면, 다음과 같이 Get.find
를 사용하여 추가한 컨트롤러를 찾아서 사용할 수 있습니다.
final controller = Get.find<CountController>();
...
print(controller.count.value);
...
controller.increment();
화면 이동시 종속성 주입
다음과 같이 Get.to
으로 화면을 이동할 때 binding
을 사용하여 컨트롤러를 생성, 주입할 수 있습니다.
Get.to(Second(), binding: BindingsBuilder(() {
Get.put(CountController());
}));
또는 다음과 같이 Get.toNamed
에서도 사용할 수 있습니다.
Get.toNamed('/second', binding: BindingsBuilder(() {
Get.put(CountController());
}));
라우트에서 종속성 주입
다음과 같이 GetPage
에서 binding
을 사용하여 컨트롤러를 생성, 주입할 수 있습니다.
getPages: [
GetPage(name:"/", page: () => Home()),
GetPage(name:"/second", page: () => Second(), binding: BindingsBuilder(() {
Get.lazyPut<CountController>(() => CountController());
})),
]
binding 분리
앞에서와 같이 Get.to / Get.toNamed
또는 GetPage
에서 binding을 직접 사용할 수 있지만, 다음과 같이 binding
을 분리할 수 있습니다.
class SecondBinding implements Bindings {
@override
void dependencies() {
Get.lazyPut<CountController>(() => CountController());
}
}
이렇게 생성한 binding
을 다음과 같이 Get.to / Get.toNamed
에서 사용할 수 있습니다.
Get.to(Second(), binding: binding: SecondBinding());
또는 다음과 같이 GetPage
에서도 사용할 수 있습니다.
getPages: [
GetPage(name:"/", page: () => Home()),
GetPage(name:"/second", page: () => Second(), binding: SecondBinding()),
]
permanent와 GetxService
GetX에서 컨트롤러는 사용이 종료되면 자동으로 메모리에서 제거됩니다. 하지만, 미리 데이터를 로드하거나 자주 사용되는 컨트롤러는 미리 메모리에 로드하고, 로드된 컨트롤러를 제거하지 않고 계속 사용할 경우가 있습니다. 이럴 때, 다음과 같이 permanent
옵션을 사용할 수 있습니다.
Get.put(CountController(), permanent: true);
또는 다음과 같이 GetxController
를 사용하는 것이 아니라 GetxService
를 사용하여 제거되지 않는 컨트롤러를 생성할 수 있습니다.
// class CountController extends GetxController {
class CountController extends GetxService {
...
}
Get.reset
이미 메모리에 추가된 컨트롤러를 초기화해야 할 경우, 다음과 같이 Get.reset
을 사용할 수 있습니다.
Get.reset();
주로 다음과 같이 테스트 코드를 작성할 때 사용됩니다.
setUp(() {
Get.reset();
});
Get.remove
거의 사용되지 않지만, 특정한 상황에서 메모리에 등록된 컨트롤러를 제거할 필요가 있을 때, Get.remove
를 사용할 수 있습니다.
Get.delete<CountController>();
GetX는 컨트롤러의 사용이 종료되면, 자동으로 메모리에서 제거되므로 보통은 사용할 일이 없습니다.
완료
이것으로 GetX에서 종속성을 관리하는 방법에 대해서 알아보았습니다. 또한 GetX로 생성한 컨트롤러를 계속 유지하거나 다시 초기화를 하는 방법에 대해서도 알아보았습니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.