플러터는 구글에서 개발한 크로스 플랫폼 모바일 앱 개발 프레임워크로, 다양한 기기에서 동작하는 앱을 만들 수 있습니다. 플러터에서는 상태 관리가 매우 중요하며, 상태 관리를 효율적으로 처리하기 위해 다양한 패턴을 사용할 수 있습니다.
Stateful Widget
플러터에서 상태를 관리하기 위한 가장 기본적인 방법은 Stateful Widget을 사용하는 것입니다. Stateful Widget은 내부에 가변 상태를 가지고 있으며, 이 상태가 변경되면 플러터는 자동으로 화면을 업데이트합니다.
Stateful Widget은 다음과 같이 구현할 수 있습니다:
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool _isClicked = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
setState(() {
_isClicked = !_isClicked;
});
},
child: Container(
color: _isClicked ? Colors.blue : Colors.red,
child: Text(_isClicked ? 'Clicked' : 'Not Clicked'),
),
);
}
}
위의 예시에서는 _isClicked
라는 상태를 관리하고, GestureDetector
위젯을 터치할 때마다 _isClicked
의 값을 변경합니다. 이때 setState
함수를 호출하여 상태가 변경되었음을 알려줍니다.
Provider 패키지
플러터에서는 Provider 패키지를 사용하여 상태 관리를 더욱 편리하게 할 수 있습니다. Provider 패키지는 상태 관리를 위한 다양한 클래스와 메서드를 제공하며, 상태 변경 시에만 필요한 부분만 업데이트할 수 있습니다.
Provider 패키지를 사용하려면 다음과 같이 의존성을 추가해야 합니다:
dependencies:
provider: ^5.0.0
그리고 다음과 같이 상태를 관리하고자 하는 클래스를 생성합니다:
class CounterModel extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
이제 위에서 생성한 클래스를 사용하여 상태 관리를 할 수 있습니다. 예를 들어, 다음과 같이 Consumer
위젯을 사용하여 상태 변경 시에만 필요한 부분을 업데이트할 수 있습니다:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('State Management Example'),
),
body: Center(
child: Consumer<CounterModel>(
builder: (context, counter, child) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Count: ${counter.count}',
style: TextStyle(fontSize: 24),
),
ElevatedButton(
onPressed: () {
counter.increment();
},
child: Text('Increment'),
),
],
);
},
),
),
);
}
}
위의 예시에서 CounterModel
클래스의 increment
메서드를 호출하여 상태를 변경하면, Consumer
위젯 내에서 builder
함수가 호출되고 화면이 업데이트됩니다.
MobX 패키지
MobX는 상태 관리를 위한 또 다른 패키지로, 플러터에서 사용하기 쉬운 문법과 간결한 코드 작성을 지원합니다. MobX를 사용하기 위해서는 다음과 같이 의존성을 추가해야 합니다:
dependencies:
mobx: ^2.0.0
flutter_mobx: ^2.0.0
MobX의 사용 예시는 다음과 같습니다:
class Counter = _CounterBase with _$Counter;
abstract class _CounterBase with Store {
@observable
int count = 0;
@action
void increment() {
count++;
}
}
위 예시에서는 @observable
으로 상태 변수를 지정하고, @action
으로 상태를 변경하는 메서드를 지정합니다. 이후 위의 클래스를 사용하여 화면을 업데이트할 수 있습니다.
MobX는 flutter_mobx
패키지를 통해 플러터와 통합되며, Observer
나 MobxProvider
를 사용하여 상태를 관리할 수 있습니다.
결론
플러터에서는 상태 관리를 위한 다양한 패턴과 패키지를 제공하고 있습니다. 각 패턴과 패키지는 특성과 개발자 선호도에 따라 선택하여 사용할 수 있습니다. 적절한 상태 관리 패턴을 선택하여 효율적인 앱 개발을 진행해보세요.