[Flutter] 상태 관리-③Provider와 종류

겨레·2024년 7월 15일
post-thumbnail

Flutter를 통해 개발하다보면 상태(State) 관리가 매우 중요하다는 것을 느낄 수 있음!

여기서 상태(State)란?
1)위젯이 빌드되는 동시에 읽을 수 있고, 2)위젯의 생명 주기동안 변경할 수 있는 정보를 말함.
(보통 사용자와 어플의 상호작용에 의해 변화하는 데이터들이 이에 해당)

특정 상태를 한 페이지 내에서만 사용할 경우엔 상태 관리가 어렵지 않겠지만, 여러 페이지에서 사용되는 상태가 필요한 상황이 많다면... 상태 관리가 복잡해지겠지?

그래서!!! 효과적인 상태 관리 방법이 필요해지게 된다. Flutter에서 사용할 수 있는 대표적인 상태 관리 방법으로는 다음을 들 수 있다.

📍 Flutter에서 사용할 수 있는 대표적인 상태 관리 방법
① Provider
② InheritedWidget & InheritedModel
③ Redux
④ BLoC / Rx
⑤ GetX

최근 많이 사용되는 건 Provider이기에 오늘은 Provider에 대해 알아보자!


📍 Provider

Provider는 Flutter에서 상태 관리를 쉽게 만드는 도구라고 생각하면 된다! 데이터를 효과적으로 제공하고 변경할 수 있는 방법을 제공한다. 그래서 Provider를 사용하면 보다 유용하게 상태를 관리하고 그 상태에 따라 UI를 업데이트 할 수 있음.

📍 Provider의 주요 기능
① 상태 관리
앱의 상태를 관리하고 상태에 따라 UI를 업데이트
② 의존성 주입
Provider는 의존성 주입을 지원해 애플리케이션 내에서 필요한 데이터나 서비스를 쉽게 전달
③ 성능 최적화
Provider는 lazy loading을 지원해서 필요할 때만 특정 서비스를 생성할 수 있음


📍 Provider 종류

① Provider

  • 변경되지 않거나 의존성이 있는 객체에 접근하는데 유용
  • Provider를 사용해 Repository, Logger, 변경되지 않는 상태를 갖는 다른 클래스에 접근할 때 사용

② StateProvider(Legacy)

  • UI에서 직접적으로 데이터를 변경할 수 있게 하고 싶을 때 사용
  • 카운트와 같이 변경될 수 있는 간단한 상태 객체를 저장하는 용도로 적합
    Map, List 등 복잡한 데이터 및 로직에서는 사용 X

③ StateNotifierProvider(Legacy)

  • StateProvider처럼 UI에서 직접적으로 데이터를 변경할 수 있게 하고 싶을 때 사용
  • 복잡한 형태의 데이터도 관리 가능(클래스의 메소드를 이용한 상태 관리)
  • StateNotifier를 상속한 클래스를 반환

④ FutureProvider

  • Future 타입만 반환 가능
  • API 요청 결과 반환 시 자주 사용됨
  • 복잡한 로직, 사용자의 특정 행동 뒤에 Future를 재실행하는 기능은 없음

⑤ StreamProvider

  • Stream 타입만 반환 가능
  • API 요청 결과를 Stream으로 반환할 때 자주 사용

⑥ ChangeNotifierProvider(Legacy)

  • ChangeNotifier 클래스는 Flutter SDK의 일부로 이를 이용해 상태를 저장하거나 변경 시 ChangeNotifier를 구독하는 객체에게 알려줄 수 있음
  • 단, ChangeNotifier를 잘못 사용할 경우 가변 상태가 되어 코드 유지보수 및 관리하기 어려워질 수 있어 주의 필요

⑦ NotifierProvider(리버팟 2.0에 추가)

⑧ AsyncNotifierProvider(리버팟 2.0에 추가)

profile
호떡 신문지에서 개발자로 환생

0개의 댓글