Flutter에서 GetX를 사용할 때 자주 마주치는 위젯 중 하나가 GetView<T>입니다.
이번 글에서는 GetView가 어떤 역할을 하고, 왜 쓰는지, 언제 쓰는 게 좋은지 자세히 정리해보겠습니다.
GetView<T>는 StatelessWidget을 상속한 GetX 전용 위젯으로,
해당 타입의 컨트롤러(T)에 직접 접근할 수 있는 controller 속성을 기본으로 제공합니다.
📌 일반 StatelessWidget에서는 Get.find()를 직접 호출해야 하지만,
GetView를 쓰면 controller로 바로 접근할 수 있어 코드가 간결해집니다.
그럼 왜 GetView를 사용하는걸까요?
| 기존 방식 | GetView 사용 |
|---|---|
final controller = Get.find<T>() 직접 선언 필요 | controller 속성으로 바로 사용 가능 |
| 중복된 컨트롤러 선언 많음 | 반복 제거, 코드 간결 |
여러 위젯마다 Get.find() 호출 필요 | View와 Controller 1:1 연결에 최적화 |
Get.put() 또는 Get.lazyPut() 등으로 컨트롤러가 미리 등록되어 있어야 합니다.
여러 컨트롤러가 필요한 복잡한 뷰에는 StatelessWidget + Get.find() 조합이 더 유연할 수 있습니다.
| ✅ 적합한 상황 | ❌ 피해야 할 상황 |
|---|---|
| 컨트롤러 1개만 사용하는 단순한 페이지 | 여러 컨트롤러를 동시에 써야 하는 복잡한 페이지 |
반복되는 Get.find()를 줄이고 싶을 때 | 컨트롤러를 조건부로 불러야 하는 경우 |
| View와 Controller가 1:1 매칭되는 구조일 때 | View가 상태에 따라 컨트롤러를 동적으로 다뤄야 할 때 |
📁 controller/home_controller.dart
class HomeController extends GetxController {
final title = 'Hello, GetView!'.obs;
}
class HomePage extends GetView<HomeController> {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Obx(() => Text(controller.title.value));
}
}