State

하요·2024년 7월 5일
0

Flutter State Management

목록 보기
1/7
post-thumbnail

Flutter에서 상태(State) 이해하기

Flutter 애플리케이션 개발에서 상태 관리는 UI와 애플리케이션 로직을 동기화하는 중요한 개념입니다. 올바른 상태 관리를 통해 데이터 일관성을 유지하고 사용자 경험을 향상시킬 수 있습니다.

주요 개념

상태란 무엇인가?

  • 상태(State)는 변수에 할당된 값입니다. 애플리케이션의 특정 시점에서의 데이터를 나타내며, UI에 직접적인 영향을 미칩니다.

StatelessWidget과 StatefulWidget

  • StatelessWidget: 상태가 없는 위젯이 아니라 상태를 변경할 수 없는 위젯입니다.

    class MyStatelessWidget extends StatelessWidget {
      final Color color = Colors.red; // 상태 상수
      
      Widget build(BuildContext context) {
        return Container(color: color);
      }
    }
  • StatefulWidget: 상태를 변경할 수 있는 위젯입니다.

    class MyStatefulWidget extends StatefulWidget {
      
      _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
    }
    
    class _MyStatefulWidgetState extends State<MyStatefulWidget> {
      Color color = Colors.red; // 상태 변수
    
      void _changeColor() {
        setState(() {
          color = Colors.blue;
        });
      }
    
      
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Stateful Widget Example')),
          body: Center(
            child: Container(color: color),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _changeColor,
            tooltip: 'Change Color',
            child: Icon(Icons.color_lens),
          ),
        );
      }
    }

상태의 종류

  • 로컬 상태(Local State): 특정 위젯에서만 사용되는 상태로, 다른 위젯과 공유되지 않습니다.
    • 예: BottomNavigationBar의 현재 선택된 탭.
  • 공유 상태(Shared State): 여러 위젯에서 공유되며 동기화가 필요한 상태입니다.
    • 예: 로그인한 유저 정보, 특정 게시글의 좋아요 표시, 쇼핑 앱의 장바구니.

상태 관리(State Management)란?

상태 관리(State Management)는 공유 상태가 변경될 때 이를 동기화하는 과정을 의미합니다. 상태 관리가 없으면 데이터 일관성을 잃어 여러 문제를 초래할 수 있습니다.

상태 관리의 필요성

  • 동일한 데이터를 여러 곳에서 가지고 있기 때문에 동기화가 필요합니다.
  • 데이터를 한 곳에서 관리하면 동기화 문제를 해결할 수 있습니다. 모든 상태 관리 방법은 공유 상태를 한 곳에서 관리하도록 중앙 집중식으로 문제를 해결합니다.

Flutter에서의 상태 관리 방법

Flutter에서는 다양한 상태 관리 도구와 패턴을 제공하여 상태를 효과적으로 관리할 수 있습니다.

StatefulWidget

  • 가장 기본적인 상태 관리 방식으로, 로컬 상태를 관리할 때 사용됩니다.

InheritedWidget

  • 위젯 트리에서 데이터를 하위 위젯에 전달하기 위한 방법으로, 주로 로컬 상태를 상위 위젯에서 하위 위젯으로 전달할 때 사용됩니다.

Provider

  • Flutter 팀에서 권장하는 상태 관리 도구로, DI(Dependency Injection)와 반응형 상태 관리를 제공합니다.

Riverpod

  • Provider의 개선된 버전으로, 더 안전하고 테스트하기 쉬운 상태 관리를 제공합니다.

Cubit

  • 간단하고 가벼운 상태 관리 솔루션으로, BLoC 패턴의 일부분입니다.

BLoC (Business Logic Component)

  • 이벤트 기반 상태 관리 패턴으로, 상태의 예측 가능성을 높여줍니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글