[flutter] 플러터 훅 위젯과 다른 UI 렌더링 방법 비교
플러터에서 UI를 렌더링할 때 기존의 위젯과 Hooks 위젯 사이에는 어떤 차이가 있는지 알아보겠습니다.
1. 기존 위젯
기존의 위젯은 StatefulWidget을 상속하여 UI 상태를 관리합니다. StatefulWidget은 상태 변화에 따라 UI를 다시 렌더링할 수 있도록 도와줍니다. 그러나 StatefulWidget을 사용하면 상태와 효과적으로 데이터를 관리하기 위해 많은 코드를 작성해야 합니다.
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyWidget'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Incremented value:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
2. Hooks 위젯
반면, Hooks를 사용하면 상태 관리와 UI 렌더링을 보다 간결하게 처리할 수 있습니다. Hooks는 함수형 위젯 내에서 상태를 관리하고 상태 변화에 따라 UI를 업데이트합니다.
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class MyHookWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final counter = useState(0);
return Scaffold(
appBar: AppBar(
title: Text('MyHookWidget'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Incremented value:',
),
Text(
'${counter.value}',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
counter.value++;
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
결론
기존의 StatefulWidget을 사용하는 방식과 Hooks를 사용하는 방식은 각각 장단점이 있습니다. StatefulWidget을 사용하면 상태 관리와 UI 렌더링을 명확히 구분하여 작업할 수 있지만, Hooks를 사용하면 효율적으로 상태를 관리하고 UI를 렌더링할 수 있습니다.
따라서 프로젝트의 특성과 개발자의 선호도에 따라 적절한 방식을 선택할 수 있습니다.
자세한 내용은 플러터 공식 문서를 참고하시기 바랍니다.