[Flutter] "같은 상태지만 다르게 움직인다" — MVVM과 StatefulWidget 이야기

서연·2025년 10월 7일
post-thumbnail

📖 MVVM 패턴과 StatefulWidget의 차이점

🧠 개요

  • MVVM 패턴과 StatefulWidget은 둘 다 상태 (State)를 다루지만 역할과 범위가 전혀 다르다.

🏗️ MVVM 패턴(Model - View - ViewModel)

📌 개념

  • MVVM은 앱 전체의 구조를 설계하는 아키텍처 패턴이다.
  • UI와 비즈니스 로직, 데이터 처리를 명확하게 분리해 유지 보수성과 재사용성을 높이는 것이 목적이다.

🧩 구성 요소

  • Model : 데이터 및 비즈니스 로직 처리 (API 통신, DB 등) 한다.
  • ViewModel : 상태 관리 및 로직 수행, ViewModel의 중간 다리 역할이다.
  • View : 화면 표시 (UI)만 담당한다.

🌟 특징

  • 각 레이어의 책임이 명확하게 분리된다.
  • ViewModel을 UI 없이 독립적으로 테스트할 수 있다.
  • 같은 ViewModel을 여러 View에서 재사용할 수 있다.
  • ViewViewModel은 데이터 바인딩을 통해 상태가 자동으로 동기화된다.

🎛️ StatefulWidget

📌 개념

  • Flutter에서 제공하는 상태를 가질 수 있는 UI 컴포넌트이다.
  • UI 내부에서 발생하는 상태 변화를 감지하고 화면을 다시 빌드 하는 역할을 한다.

⚙️ 동작 방식

  • setState()를 사용해 상태를 변경한다.
  • 상태가 바뀌면 해당 위젯이 다시 빌드 되어 UI가 갱신된다.

⚠️ 한계점

  • State 객체 안에 데이터, 로직, UI 코드가 함께 존재하기 때문에 단순한 기능에는 편리하지만 앱이 커지면 코드가 뒤섞여 복잡해진다.
  • UI와 로직이 강하게 결합되어 있어 로직만 따로 테스트하거나 재사용하기 어렵다.

🎯 결론

  • MVVM은 앱을 구조적으로 설계하는 패턴, StatefulWidget은 UI의 상태 변화를 처리하는 도구로 둘은 대체 관계가 아니라 서로 보완 관계이다.
  • MVVM 구조 안에서도 View 단계에서는 StatefulWidget을 사용할 수 있다.

0개의 댓글