Flutter

[Flutter] GetX MVC 패턴과 Provider MVVM 패턴

챎 님 2025. 3. 6. 14:02

✔️ 들어가며,

평소 앱 개발을 할 때는 플러터의 Provider 와 MVVM 패턴을 사용하여 개발을 하였는데,

다른 상태 관리 프로그램도 궁금해져서 GetX MVC 패턴에 대해서도 알아 보기 위해 이 포스트를 작성하였습니다.

두 패턴을 비교해 보며, 각자의 장단점, 어떨 때 사용하면 좋을지에 대해 알아 보겠습니다!


✔️ provider 와 MVVM 

먼저, 평소에 접해 보았던 Provider 에 대해 알아 보겠습니다.

provider 은 코드의 재사용성이 높고, 테스트하기 쉬운 구조를 제공하므로 장기적인 관점에서 바라 볼 때 장점이 큽니다.

이는 MVVM 아키텍처 패턴과 주로 사용이 됩니다.

몇 번 다룬 적이 있듯이, MVVM 패턴은 Model, View, ViewModel 로 이루어져 있습니다.

이 아키텍처는 뷰와 뷰모델 간의 양방향 데이터 바인딩을 지원하여, 데이터의 변경이 자동으로 UI에 반영됩니다.

즉, 분리 덕에 UI 변경 시에도 비즈니스 로직에 영향을 주지 않기에 개발자에게 더욱 편리해집니다.

  • 분리
  • 테스트 용이
  • 코드 재사용
  • 상태 관리 간소화
  • 확장성

다섯 가지 정도로 장점을 분류해 볼 수 있습니다.

 

UI 와 ViewModel 을 명확히 분류하기에, 코드 가독성과 유지 보수성이 향상됩니다.

이는 독립적으로 운영되기에 별도로 단위 테스트를 진행할 수 있게 됩니다!

또한, ViewModel 을 여러 View 에서 재사용이 가능하기에 중복 없이 관리하기에도 용이합니다.

새로운 기능을 추가하거나 기존 기능을 수정하기에도 쉽기 때문에 대규모 앱 개발 시에 적합한 구조로 운영이 되겠지요.

 

하지만 단점도 존재하게 됩니다.

  • 과도한 코드
  • 성능 저하
  • 디버깅 복잡성

세 가지로 정리해 보겠습니다.

 

제일 간단하게 초보 개발자에게는 복잡하다는 느낌을 줄 수 있습니다. 🥺

또한 장점으로 꼽혔던 대규모 앱 개발 시 적합하다는 의견은 소규모 앱에서는 단점으로 작용합니다. 불필요하게 많은 파일들과 클래스가 생성되며, 간단한 기능을 구현하는 데에도 ViewModel 을 만들어야 하는 부담이 있습니다. 이는 성능 저하를 야기시킬 수 있겠죠.

 

그렇다면 이러한 조합은 중대형 규모의 앱을 개발할 때 유용하게 작용한다는 사실을 알 수 있습니다.

장기적인 유지 보수가 필요한 프로젝트나 다양한 데이터 소스를 다루는 앱, 복잡한 UI 상태 관리가 필요한 앱에서 사용하게 된다면 보다 편한 개발을 할 수 있을 것 같습니다.


✔️ GetX 와 MVC

 

다음으로는 GetX 입니다.

GetX 의 특징은 간결한 문법으로 개발 시간을 단축한다는 점과 최소한의 리소스로 최대의 성능을 제공한다는 점입니다.

또한 Provider 에는 없는 라우터 지원이 있습니다!

이는 context 없이도 화면 간 이동이 가능한 기능입니다. 복잡하게 Navigator 코드 대신 간단한 명령어로 라우팅을 처리할 수 있는 것입니다.

Navigator.of(context).push(MaterialPageRoute(
    builder: (_) => NextPage(),
));

이러한 코드를 

Get.to(NextPage());

이렇게 간결한 표현이 가능해집니다.

 

다음으로는 MVC 패턴입니다. 간단하게 알아 보고 GetX 와의 장단점, 어떨 때 사용하면 좋을지에 대해 작성해 보겠습니다.

MVC 패턴은 Model, View, Controller 세 가지로 구성되어 있습니다.

이는 구조 파악과 확장에 큰 장점이 있습니다. 간결하기 때문이죠.

하지만 Model 에 비즈니스 로직이 너무 집중되어 View 와의 의존성이 높아지며 복잡해질 수 있다는 단점이 있습니다. 애플리케이션이 커질 수록 Controller 코드량이 커지며, 유지 보수에 어려움을 겪을 수 있습니다.

 

이런 조합은 어떠한 상황에서 유용하게 작용할 수 있을까요?

빠른 개발이 필요한 소규모 프로젝트나, 초보 개발자와 함께 하는 프로젝트에서 진입 장벽이 낮아지며 쉽게 이용할 수 있습니다.

또한 간단한 상태 관리를 요하는 앱, 빠른 성능이 중요한 앱과 같은 상황에서 사용하게 된다면 보다 쉽고 빠른 결과물을 볼 수 있을 것 같습니다!


✔️ 참고용 과거 발행글

[CS] MVC 와 MVVM 아키텍처