App 개발관련/flutter
[GetX] Get.put과 Get.find 정리
후니의 개발이야기
2025. 4. 11. 08:56
728x90
반응형
이번에 토이프로젝트를 하나 진행하면서 알게된 GetX 프레임워크에서 사용하는 Get.put, Get.find에 대한 것을 정리하고자 이렇게 포스팅을 합니다.
Get.put과 Get.find는 의존성주입(Dependency Injection)과 상태 관리를 위해 사용되는 두 가지 핵심 메서드 입니다.
이들의 차이점을 기능, 사용 시점, 동작 방식 측면에서 한번 정리해볼께요 .
1. Get.put
정의
- Get.put<T>(T dependency, {String? tag})는 새로운 인스턴스를 생성하고 GetX의 의존성 관리 시스템에 등록합니다.
- 컨트롤러, 서비스, 또는 기타 객체를 메모리에 저장해 다른 곳에서 재사용할 수 있게 합니다.
주요 특징
- 인스턴스 생성 및 등록:
- Get.put을 호출하면 지정된 타입의 새 인스턴스가 생성되고, GetX의 전역 스토리지에 저장됩니다.
- 단일 인스턴스(Singleton):
- 기본적으로 동일한 타입의 인스턴스는 하나만 유지됩니다(싱글톤 패턴). 동일한 타입으로 Get.put을 다시 호출하면 기존 인스턴스를 덮어씁니다(새로 생성).
- 태그 옵션:
- tag 파라미터를 사용하면 같은 타입의 여러 인스턴스를 구분해 저장할 수 있습니다.
example
class ThemeController extends GetxController {
RxBool isDarkMode = false.obs;
void toggleTheme(bool value) => isDarkMode.value = value;
}
void main() {
Get.put(ThemeController()); // ThemeController 인스턴스 생성 및 등록
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(home: HomePage());
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final ThemeController controller = Get.find(); // 등록된 인스턴스 가져오기
return Scaffold(
body: Obx(() => Switch(
value: controller.isDarkMode.value,
onChanged: controller.toggleTheme,
)),
);
}
}
언제 사용?
- 앱 시작 시(main.dart) 또는 특정 페이지에서 처음 컨트롤러를 초기화할 때.
- 단일 인스턴스를 전역적으로 관리하고 싶을 때.
2. Get.find
정의
- Get.find<T>({String? tag})는 Get.put으로 이미 등록된 인스턴스를 찾아 반환합니다.
- 새로운 인스턴스를 생성하지 않고, 기존에 등록된 객체를 가져옵니다.
주요 특징
- 인스턴스 검색:
- GetX의 의존성 스토리지에서 해당 타입(T)의 인스턴스를 찾음.
- 등록 필요:
- Get.put으로 미리 등록되지 않은 경우 Get.find를 호출하면 Get.lazyPut이나 Get.put이 호출되지 않았다는 오류("Get.find() failed to find an instance")가 발생합니다.
- 태그 사용:
- tag를 지정해 특정 인스턴스를 찾을 수 있음.
언제 사용?
- 이미 등록된 컨트롤러나 서비스를 가져와야 할 때.
- 위젯 트리 내에서 동일한 인스턴스를 재사용할 때.
3. 주요 차이점 요약
항목 | Get.put | Get.find |
기능 | 인스턴스를 생성하고 등록 | 등록된 인스턴스를 검색 |
인스턴스 생성여부 | 새 인스턴스 생성 | 생성하지 않음, 기존 인스턴스 반환 |
호출 시점 | 페이지 진입시 | 필요할 때 찾아서 사용 |
오류 발생조건 | 동일 타입 중복 등록시 덮어씀 | 등록되지 않은 것을 호출할때 |
태그 사용 | tag로 구분해 여러 인스턴스 등록 가능 | tag로 특정 인스턴스 검색 가능 |
사용 목적 | 의존성 주입 시작 | 의존성 재사용 |
tag로 사용하는 것은 저도 해본적이 없어서 예시만 가져와 볼께요 .
void main() {
Get.put(ThemeController(), tag: 'light'); // 라이트 테마 컨트롤러
Get.put(ThemeController(), tag: 'dark'); // 다크 테마 컨트롤러
runApp(MyApp());
}
class HomePage extends StatelessWidget {
final lightController = Get.find<ThemeController>(tag: 'light');
final darkController = Get.find<ThemeController>(tag: 'dark');
@override
Widget build(BuildContext context) => Scaffold(body: Text('Dual Theme'));
}
4. 결론
- Get.put: 의존성을 초기화하고 등록하는 시작점.
- Get.find: 이미 등록된 의존성을 가져와 재사용.
- 프로젝트에서 컨트롤러를 전역적으로 관리하려면 main.dart에서 Get.put으로 등록하고, 각 페이지에서 Get.find로 호출하는 패턴이 일반적입니다.
오랜만에 Flutter 를 가지고 토이 프로젝트를 진행하면서 한번더 정리해보는 시간이었습니다.
이번에 앱을 또 출시하게 되면 포스팅하겠습니다.
다운로드와 많은 응원 부탁드릴께요 ^^

728x90
반응형