인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

민태호님의 프로필 이미지
민태호

작성한 질문수

Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)

기존 코드 mvvm으로 역할 분리하는 기준이 궁금합니다

해결된 질문

작성

·

77

0

강의를 통해 학습에 정말 많은 도움을 받고 있습니다. 감사합니다.

 

처음부터 구조를 잘 잡아서 설계하면 좋겠지만, 역할이 제대로 명시되지 않은 함수들을 각각 repository, service, viewmodel로 역할을 명시해주는 것도 난이도가 있으면서 함수들의 역할을 더 명확히 파악하는 데 도움이 될 것 같아서 파일 하나에 함수를 몰아 놓고 분리해보고 있습니다.

혹시 repository, service, viewmodel로 함수를 분리해서 작성할 때, 명확한 기준이 존재할까요??

제가 학습한 바로는 repository는 데이터베이스/서버 통신 또는 데이터 불러오기 관련, service는 repository를 활용한 비즈니스 로직, Viewmodel은 service를 활용한 View와의 상호작용이라고 알고 있습니다.


제가 아직 비즈니스 로직을 명확하게 구분하기기 어렵습니다..

에를 들면 파일 탐색기 실행 > 파일 경로 받기 > 파일 디코딩 > JSON(map)형식 변환 > 데이터 필터링 의 과정이 있다고 가정하면, 여기서 어디까지의 함수를 어디로 분리할 지 감이 오지 않습니다.
명확하게 구분할 수 있는 기준이나 팁이 존재한다면 알고 싶습니다!

답변 2

1

오준석님의 프로필 이미지
오준석
지식공유자

인공지능 답변에 이어 제가 답변 드리겠습니다.

이 부분이 쉽지 않은 영역인데요.

파일 디코딩 -> JSON 변환은 순수하게 데이터를 처리하는 부분이고 Service 또는 DataSource 로 부를 수 있겠습니다.

비즈니스 로직은 여기에 앱에 필요한 로직이 가미되면 그것이 비즈니스 로직입니다.

비즈니스 로직은 두 군에서 작성할 수 있겠습니다.

View에 대한 비즈니스 로직은 ViewModel 에 함수에서 작성합니다.

그 외에 데이터의 복잡한 처리가 비즈니스 로직이라고 보면 될 것 같습니다.

결론적으로 "앱에 필요한 로직이 가미되면 그것이 비즈니스 로직"이다. 라고 보시면 어떨까요?

민태호님의 프로필 이미지
민태호
질문자

"앱에 필요한 로직"이라는 키워드가 정말 좋은 것 같습니다.

참고해서 공부해보겠습니다 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 민태호님.

먼저, 질문해주신 내용에서 적절한 답변을 찾기 위해 먼저 비슷한 주제를 다루는 게시물을 추천 드리겠습니다:

  1. 폴더 구조화 질문 : 이 게시물에서는 기능별로 어떻게 아키텍처를 구성할지에 대해서 설명하고 있습니다. 특히, 앱의 규모가 커질 때 폴더 구조를 클린 아키텍처에 맞게 어떻게 구성할지에 대한 예시를 제공합니다. 이미지 URL도 포함되어 있어, 실제 구현에 도움이 될 수 있습니다.

  2. 클린 아키텍처에 대해 : 클린 아키텍처 내에서 Use Case와 MVC 패턴의 서비스 간의 차이점을 설명하고 다중 모델을 어떻게 관리할지에 대한 고민을 다룬 게시물입니다. 클린 아키텍처의 필요성에 대해 고민하시는 데에 도움이 될 수 있습니다.

  3. 클린 아키텍처, MVVM 여러 질문 : MVVM과 클린 아키텍처에서 각 컴포넌트의 역할에 대한 자세한 설명이 담겨 있습니다. 로그인 정보 관리 및 UseCase와 ViewModel 구분에 대한 사용자님의 고민을 자세히 다룹니다.

Flutter에서 MVVM 패턴을 사용하는 주요 장점은 코드의 역할을 명확히 분리하여 유지보수가 쉽고 테스트가 용이하다는 점입니다.

  • Repository는 데이터를 가져오고 저장하는 역할을 하며, 데이터베이스나 웹 서버와의 직접적인 상호작용을 담당합니다.
  • Service는 비즈니스 로직을 포함하여, Repository를 활용해 좀 더 고수준의 데이터를 가공하거나 처리하는데 사용됩니다.
  • ViewModel은 UI와 상호작용하며, View에 필요한 데이터를 Service를 통해 조작하고 전달하는 역할을 합니다.

질문에서 예로 드신 파일 처리 시스템을 보자면 각각은 다음과 같이 배치할 수 있습니다:
- Repository: 파일 경로를 통해 파일을 읽어오는 역할
- Service: 파일을 디코딩하고 JSON 형식으로 변환하는 과정
- ViewModel: 변환된 데이터를 필터링하고 UI에 전달

비즈니스 로직의 구분은, 어떤 로직이 UI 변화에 직접 영향을 주는지 또는 데이터를 가공하는 과정인지에 따라 결정될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

민태호님의 프로필 이미지
민태호

작성한 질문수

질문하기