[TIL] 곰튀김님의 MVVM

rbw·2023년 8월 8일
0

TIL

목록 보기
86/97

곰튀김님의 MVVM 유튜브 영상을 보고 기록하는 글 자세한 내용은 아래 링크를 참조 baram
https://www.youtube.com/watch?v=M58LqynqQHc

MVVM - 곰튀김 유튜브

먼저 모델과 뷰의 관계에 대해서 설명을 하심

  • 뷰: 화면
  • 모델: 데이터

보통 모델은 여러가지 형태로 변형하게 된다. 영상의 예시에서는 아래와 같다.

Model -> UtcTimeModel -> String -> Date -> String

여기서 모델이라고 부를만한것은 4번째에 Date 부분이다.

화면에 보여질 것은 마지막 부분인 String이다. 얘를 화면모델이라고 하겠음

UtcTimeModel은 서버에서 가져온 모델. 서버모델

우리가 사용하는 모델들은 서버에서 가져온 서버모델, 실제 데이터의 역할을 하는 모델, 화면에 보여지기 위한 화면모델 3가지의 형태로 구성된다.

여기서 뷰모델이 나오게된 이유를 생각할 수 있다. 모델의 데이터를 화면에 바로 사용할 수 없으니, 화면에 맞는 모델을 하나 더 만들어야 하지 않냐 에서 나온것.

서버모델은 DB에서 가져온 데이터일 수도 있고 서버에서 가져온 것일 수도 있다. 이를 Entitiy라고 영상에서는 부른다고 하심.

클린아키텍처에서는 엔티티는 핵심업무데이터와, 핵심 업무 로직들을 묶어서 얘기함 여기서는, 데이터만을 엔티티라고 하신듯하다.

엔티티가 로직에서 취급한 모델이되고, 로직에서 취급한 모델이 뷰모델로 변경이되어서 화면에 보여진다.

이제 엔티티를 가져오는 역할을 하는 친구를 Repository 라고 부르심 다음 엔티티로부터 모델을 만들어 내는 Mapper 같은게 있음 이 결과물로 모델이 나오고, 로직을 수행하여, 화면에 보여주기 위해서 뷰모델 형태로 변경하여 뷰로 뿌려진다~

흐름을 적으면 아래와 같다

Repository - Entity - Mapper - Model - Logic(Service) - ViewModel - View

RxSwift, Combine을 사용하지 않고 Closure과 didSet으로 데이터의 업데이트를 알려서 MVVM을 구현하심

Repository는 서버에서 가져온 모델을 전달하고 이를 사용하는 부분은 Service에서 받는다. 그리고 로직에서 사용하는 데이터들로 구성된 모델의 형태로 변형하여 이를 ViewModel로 넘긴다.(ViewModel에서 Service의 fetch를 사용함)

Service가 핵심 업무 로직들이 있는 곳이라고 하심. 그리고 State(현재 프로그램의 데이터)도 가지고 있다
뷰모델은 오직 뷰와 관련된 로직들만 수행한다.

여기서 Rx나 Combine을 사용하는 이유는 콜백을 리액티브하게 받기 위함이라고 하심. 굳이 사용하지 않아도 MVVM은 구현이 가능하다~

마무리

뷰는 뷰모델을 이용해서 화면을 그립니다 (의존해서) 데이터를 들고오고, 뷰모델은 서비스에 의존해서 모델을 가져옵니다. 모델은 레포지토리로부터 얻어온 엔티티를 가지고 만들어냅니다.

방향의 흐름이 뷰 -> 뷰모델 -> 서비스 -> 모델 -> 레포지토리 -> 엔티티로 일관성이 있다.


요즘 MVC를 MVVM으로 리팩토링 하고 있는데 확실하게 알고 있지는 않아서 유명한 영상을 한 번 찾아서 시청해보았다. 조금은 더 MVVM에 대한 확신이 생기는듯 해서 좋았다ㅏㅏ

지금 내가 구현했던 MVVM에서는 Input Output 등을 받아서 전달해주었는데 이런 디테일한 부분은 개발자마다 다 다르지 싶다. 위에 설명하신 이런 흐름만 지켜진다면 사실 MVVM이지 않나 싶음.

그리고 되게 세세하게 나누는게 유지보수나 테스트적인 부분에서는 좋아보이기는 하는데, 코드가 조금은 더 늘어나는 단점은 있는듯 하다. 이런 점은 상황에 맞게 적절히 타협을 해서 구현을 하면 좋을듯 하다.

이번 예시코드에서는 전부 다 내부에서 생성해서 하셨는데, 생성자 주입을 사용하여 의존성을 줄이고, 테스트 용이성을 증가하는 방법도 좋을듯하다. 간단하게 MVVM에 대한 설명이라 내부에서 생성하고 넘어가신듯함.

매우 간단명료하게 설명을 해주셔서 알기 쉬운 영상이였슴니다 MVVM 공부하려면 꼭 보는걸 추천함니다

profile
hi there 👋

2개의 댓글

comment-user-thumbnail
2023년 8월 8일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

1개의 답글