본문 바로가기
코딩/Flutter

[Flutter] 상태관리란 무엇인가

by Say_Young 2022. 4. 27.

내용 출처: 

(1) 블로그

https://dev-yakuza.posstree.com/ko/flutter/provider/#provider란

 

[Flutter] Provider

이번 블로그 포스트에서는 Flutter에서 전역 상태 또는 위젯끼리 상태를 공유하기 위해 Provider를 사용하는 방법에 대해서 알아보겠습니다.

dev-yakuza.posstree.com

(2) 유튜브

코딩쉐프 플러터 조금 매운맛 강좌 1

 

플러터를 공부하다보면, '상태관리'라는 말을 자주 듣게 된다. 무슨 뜻일까?

 

1. Flutter의 상태 관리란, 데이터의 상태라고 생각하면 된다. 

현재의 데이터에 맞게 화면을 변경해주고, 반응에 대응해 주기 위해 필요하다고 한다. 

 

2. 만약 다른 위젯에서 동일한 상태(Data)가 필요하다면 어떻게 해야할까? 

 

상태를 공유하는 두 위젯의 공통 부모 위젯을 Stateful Widget으로 만들고 자식 위젯을 만들 때 파라미터로 해당 상태를 전달하면 두 위젯 사이에서 동일한 상태를 사용할 수 있으나, 상태표시를 위해 불필요한 위젯들이 Re-build되면서 성능 이슈가 나타날 수 있다고 함.

3. Provider는 이러한 문제 해결을 위해, 동일한 상태(데이터)를 전역적으로 다른 위젯과 공유하기 위해 사용된다. 느낌적으로 보면, 우리에게 필요한 상태 데이터가 먼 길 돌아오는 과정에서 비효율적으로 움직이거나 사고가 발생하지 않도록 따로 이동시켜주는 드론같은 거라고 보인다. 

 

4. 사용할 때는 위젯트리와 상관없이 상태(데이터)를 저장할 클래스를 생성하고 해당 상태를 공유하는 공통 부모 위젯에 Provider를 제공(Provide)하고, 상태를 사용하는 곳에는 Provider의 데이터를 읽어서 사용하게 한다(아직 무슨소리인지 모름)

 

5. Flutter Dev에서는 Provider를 공식적으로 추천하고 있고 가장 보편적이라고 한다. 그리고 Provider를 통한 Riverpod과 연계가 가능하다(이것도 아직 무슨소리인지 모름).

 

6. 상태란, UI에 변화가 생기도록 영향을 미치는 데이터를 말함. 데이터에는 앱 수준의 데이터와 위젯 수준의 데이터가 있다. 

앱 수준의 데이터는 서버와 연동해서 사용자 인증을 하거나 서버의 자료를 정보를 가져와서 화면에 보여주는 데이터를 말하고

위젯 수준의 데이터는, 빈 체크박스에 사용자가 터치를 하면 체크표시가 생기게 해서 위젯차원에서 화면에 보여주는 데이터를 말한다. 

상태관리라는 말은 주로 앱 수준의 데이터를 관리하는 것을 뜻함.

 

관리라는 말은 효율성이라는 단어와 직결됨. 플러터는 앱의 State가 바뀌면, 기본적으로 hot reload를 통해 위젯트리를 re-build함.

플러터는  state가 변해서 UI를 다시 그려야 하는 경우 기본적으로 setState method를 사용함. 

 

setState의 기능은, 앱의 화면을 재구성해야 하는 경우 Build method를 호출해서 UI를 렌더링하게 만드는 것임. 플러터에 기본적으로 내장된 상태 관리의 한 방법이라고 할 수 있음. 

 

그런데, 단순히 데이터의 전달을 위해 전체 위젯트리를 다시 re-build하는 것은 비효율적일 수 있음. 그리고, 동시에 다른 위젯의 state를 업데이트시켜주지 못하고 하나에 한 번의 데이터만을 전달해 줄 수 있음. 

 

이러한 처리는 상태관리의 일종이긴 하지만 불필요한 UI 렌더링이 발생하여 비효율적이고, 그래서 필요한 것이 Provider임.

 

7. 따라서, State management란 아래 두 가지를 다루어야 함

(1) 위젯이 쉽게 데이터에 접근할 수 있는 방법

(2) 변화된 데이터에 맞게 UI를 다시 그려줘야 함

댓글