Search

GetX

GetX

: Flutter 상태관리, 라우팅, 의존성 주입 라이브러리
GetX는 Flutter에서 상태관리, 라우팅, 의존성 주입(DI) 을 한 번에 해결할 수 있는 강력하고 가벼운 라이브러리입니다.

GetX의 주요 특징

간단한 상태관리obs(Observable) 변수를 사용하여 상태 자동 업데이트
빠른 성능 → 최소한의 리소스를 사용하여 최적화됨
라우팅 관리Get.to(), Get.off()로 간편하게 화면 이동
의존성 주입(DI)Get.put(), Get.find()로 객체를 쉽게 주입
별도의 context 불필요BuildContext 없이 UI 업데이트 가능
다양한 플랫폼 지원 → 모바일, 웹, 데스크톱까지 지원

GetX 설치

flutter pub add get
Shell
복사
또는
dependencies: get: latest_version
YAML
복사

GetX 상태관리 사용법

간단한 상태관리 (obs 사용)

import 'package:flutter/material.dart'; import 'package:get/get.dart'; class CounterController extends GetxController { var count = 0.obs; // Observable 변수 void increment() => count++; } void main() { runApp(GetMaterialApp(home: CounterScreen())); // GetMaterialApp 사용 } class CounterScreen extends StatelessWidget { final CounterController controller = Get.put(CounterController()); // 의존성 주입 Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('GetX Counter')), body: Center( child: Obx(() => Text('Count: ${controller.count}', style: TextStyle(fontSize: 24))), ), floatingActionButton: FloatingActionButton( onPressed: controller.increment, child: Icon(Icons.add), ), ); } }
Dart
복사
obs를 사용하여 상태를 감지하고, Obx 위젯을 사용하여 UI 자동 업데이트!
Get.put()으로 Controller를 전역에서 관리

GetBuilder 사용 (성능 최적화 가능)

class CounterController extends GetxController { int count = 0; void increment() { count++; update(); // UI 업데이트 } } class CounterScreen extends StatelessWidget { Widget build(BuildContext context) { return GetBuilder<CounterController>( init: CounterController(), builder: (controller) => Scaffold( body: Center(child: Text('Count: ${controller.count}')), floatingActionButton: FloatingActionButton( onPressed: controller.increment, child: Icon(Icons.add), ), ), ); } }
Dart
복사
GetBuilder필요한 위젯만 리렌더링 하므로 성능 최적화 가능!
Obx와 비교했을 때, 더 적은 리소스를 사용하므로 최적화가 필요할 때 사용

GetX 라우팅 (페이지 이동)

GetX 라우팅 설정

void main() { runApp(GetMaterialApp( initialRoute: '/', getPages: [ GetPage(name: '/', page: () => HomeScreen()), GetPage(name: '/second', page: () => SecondScreen()), ], )); }
Dart
복사

페이지 이동 (Get.to(), Get.off())

class HomeScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( body: Center(child: ElevatedButton( onPressed: () => Get.to(SecondScreen()), // 다음 페이지로 이동 child: Text('Go to Second Page'), )), ); } } class SecondScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( body: Center(child: ElevatedButton( onPressed: () => Get.off(HomeScreen()), // 뒤로가기 없이 이동 child: Text('Back to Home'), )), ); } }
Dart
복사
Get.to(NextScreen()) → 새로운 페이지로 이동
Get.off(NextScreen()) → 현재 페이지를 제거하고 이동
Get.offAll(NextScreen()) → 모든 이전 페이지 제거 후 이동

GetX 의존성 주입 (DI)

즉시 주입 (Get.put())

final CounterController controller = Get.put(CounterController());
Dart
복사
앱이 실행되면 객체가 메모리에 즉시 생성됨

지연 주입 (Get.lazyPut())

Get.lazyPut<CounterController>(() => CounterController());
Dart
복사
필요할 때만 객체 생성 (메모리 절약)

영구적인 객체 (Get.putAsync())

Get.putAsync<CounterController>(() async => CounterController());
Dart
복사
비동기 초기화가 필요한 경우 사용

GetX vs Bloc vs Provider vs Riverpod 비교

기능
GetX
Bloc
Provider
Riverpod
상태 관리
간편함 (obs, GetBuilder)
구조적 (Cubit, Bloc)
기본 (ChangeNotifier)
강력함 (StateNotifier, Notifier)
비동기 상태 관리
RxDart 없이 가능 (FutureBuilder 없이도 가능)
BlocObserver, Cubit 등 지원
기본적으로 지원 X (FutureBuilder 사용해야 함)
FutureProvider, AsyncNotifier 제공
의존성 주입 (DI)
Get.put(), Get.find()
RepositoryProvider, MultiBlocProvider
DI 기본 지원 없음 (Provider 직접 주입)
Provider 기반 DI 사용 (ref.read(), ref.watch())
라우팅 관리
Get.to(), Get.off()
없음
없음
없음
전역 상태 관리
Get.put()으로 쉽게 가능
가능 (BlocProvider)
가능 (MultiProvider)
ProviderScope 사용
반응형 프로그래밍 지원
가능 (RxDart 없이도 반응형 가능)
강력한 이벤트 기반
제한적
가능 (watch(), listen())
코드 복잡도
쉬움 (보일러플레이트 적음)
가장 복잡함
보일러플레이트 많음
비교적 복잡함
성능 최적화
우수 (GetBuilder 사용 가능)
우수 (BlocListener, BlocObserver)
비교적 낮음
우수 (watch(), read())
메모리 효율성
높은 성능 (Get.lazyPut() 지원)
이벤트 단위로 상태 유지
항상 인스턴스 유지
필요할 때만 초기화 (lazy initialization)
테스트 용이성
상대적으로 부족
가장 우수
비교적 쉬움
매우 우수
앱 크기 영향
가장 가벼움
가장 무거움
상대적으로 무거움
가벼움
Flutter 공식 지원
비공식
Flutter 팀 공식 지원
공식 패키지
공식 패키지
대규모 앱 적합성
작은 앱에 적합
대규모 앱에 가장 적합
가능
중·대규모 앱 가능

GetX를 사용해야 하는 경우

상태관리 + 라우팅 + 의존성 주입을 한 번에 해결하고 싶을 때
BuildContext 없이 UI를 업데이트하고 싶을 때
빠르고 가벼운 퍼포먼스 최적화가 필요한 경우
초보자도 쉽게 사용할 수 있는 간단한 상태관리를 원할 때
결론: GetX는 가장 간단하면서도 강력한 Flutter 상태관리 라이브러리 중 하나!