Flutter (앱 개발)/Flutter 트랙

[Flutter 숙련 TIL] MVVM 아키텍쳐 알아보기 -StatefulWidget 코드 이해

Ize𓆜 2025. 4. 15. 21:54
728x90
728x90

 


Ⅰ. 서론

 

한눈에 보기 힘들었던 StatefulWidget 코드

 

 

Flutter를 처음 접했을 때는

 StatefulWidget 하나만으로도

 로직부터 상태, UI까지

 모두 구현할 수 있어서 

나름 만족스러웠어요. 

 

하지만 프로젝트가 커지면서 

화면마다 복잡해진 로직이 겹치고, 

기능이 많아질수록 

무엇이 어디에 있는지 모를

 코드 지옥을 경험하게 되었죠.

 


MVVM 아키텍처는 그런 고민 속에서 

자연스럽게 찾아보게 된 키워드였고, 

이번 수업을 통해 

구체적으로 어떻게 구성되고

 동작하는지를 배우게 되었습니다.

 

 


처음엔 어렵지만 한 번 구조가 잡히면 정말 편해진다

 

 

MVVM이라는 말 자체도 낯설었고,

 ViewModel과 Repository의 역할을

 정확히 구분하는 것도 처음엔 헷갈렸습니다.

 

 하지만 코드를 분리하면서 

UI 코드가 

점점 간결해지는 걸 직접 경험하니, 

왜 많은 개발자들이

 MVVM을 권장하는지 체감하게 되었어요.


Ⅱ. 본론

 

 UI vs. UX의 차이점

 

 

MVVM은 Model, View, ViewModel로

나뉘는 아키텍처입니다.

 

Model + View + ViewModel 

입니다.

 

 

즉 정리하면 아래와 같습니다.

 

구성 요소역할
 
Model 서버에서 데이터를 가져오는 계층. User, Pet 등의 데이터 클래스 및 Repository
View 실제 사용자에게 보이는 화면. Flutter에서는 Widget
ViewModel Model에서 데이터를 받아 가공하고 View에 전달. 중간 처리자 역할

🔁 View는 ViewModel을 구독하고, ViewModel은 View를 전혀 모른다는 것이 핵심!

 

 

 


MVVM vs StatefulWidget 차이점

 

✅ StatefulWidget의 흐름

출처 :teamsparta

 

  1. 사용자 이벤트 처리
  2. 직접 데이터 요청
  3. 직접 받은 데이터 가공
  4. 직접 상태 업데이트 → 화면 갱신

➡ 위젯 하나가 모든 역할을 하며 코드가 복잡해지고 테스트가 어려워짐


✅ MVVM의 흐름

출처 : teamsparta

 

  1. ViewModel을 구독
  2. 사용자 이벤트 → ViewModel에게 요청
  3. ViewModel이 로직 처리
  4. Model에서 데이터 요청
  5. 데이터 수신 → 가공
  6. ViewModel이 상태 변경 알림
  7. View가 감지하여 화면 갱신

➡ 각자의 역할에 집중, 유지보수와 테스트가 쉬운 구조

 

즉 아래와 같은 데이터 흐름으로 정리할 수 있습니다.


MVVM의 장점

 

출처 : teamsparta

 

즉 아래와 같이 그 장점이 정리됩니다. 

 

  • 코드 가독성 향상: UI, 비즈니스 로직, 데이터가 분리됨
  • 유지보수 쉬움: 로직이 명확히 나뉘어 있어 협업도 수월
  • 테스트 용이: ViewModel은 UI와 분리되어 단위 테스트 가능
  • 낮은 결합도: ViewModel은 어떤 View가 자신을 구독하는지 모름

 


Flutter에서의 MVVM 구현 방법

 

 

Flutter에서는 기본적으로

MVVM을 강제하지 않지만,

상태 관리 도구를 사용하면

더 쉽게 구현할 수 있어요.

 

 

아래는 제가 연습했던 파일이 들어있는

GitHub 주소입니다.

https://github.com/Linayoo01/-250415-flutter_mvvm_counter

 

GitHub - Linayoo01/-250415-flutter_mvvm_counter

Contribute to Linayoo01/-250415-flutter_mvvm_counter development by creating an account on GitHub.

github.com

 

 

 

  • 추천 라이브러리: Riverpod
    → ViewModel을 Provider로 구성하고, View에서 이를 구독하여 상태 변경을 감지할 수 있음.

Riverpod 외에도 GetX, Bloc 등 다양한 상태 관리 도구가 있지만, 초심자에게는 Riverpod이 문법이 간단하고 구조가 명확해 추천됩니다.

 

 


Ⅲ. 결론

 

처음엔 귀찮고 복잡하지만 결국 더 편해지는 구조

 

 

MVVM 구조를 처음 설계할 땐

왜 굳이 나눠야 하지? 싶었지만,

프로젝트가 커질수록

그 진가가 드러났습니다.

 

특히 ViewModel을 테스트하거나

기능을 빠르게 수정해야 할 때,

한눈에 구조가 보이고

역할이 명확한 코드의 장점을 크게 느꼈어요.


Flutter에서의 성장 포인트

 

 

이번 수업을 통해 

구조적인 설계 능력을 키우는 것이

 앱 개발 실력을 끌어올리는 데 

얼마나 중요한지를 깨달았고, 

단순히 기능 구현에서 그치지 않고

 더 좋은 코드 구조를 

고민하는 습관을 기르게 되었습니다. 

 

앞으로 더 복잡한 앱을 만들 때도

 MVVM을 적극적으로 활용할 예정입니다.

 

728x90
728x90