Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MVVM에 대하여 설명해주세요. #18

Open
youn9k opened this issue Jan 4, 2025 · 4 comments
Open

MVVM에 대하여 설명해주세요. #18

youn9k opened this issue Jan 4, 2025 · 4 comments

Comments

@youn9k
Copy link
Collaborator

youn9k commented Jan 4, 2025

  • MVVM의 등장 배경을 설명한다.
  • Model, View, ViewModel 의 역할을 소개한다.
  • 장점과 단점을 소개한다.
  • 비대해진 View Model을 해결할 방법을 소개한다
@hsw1920 hsw1920 added the pattern label Jan 4, 2025
@0Hooni 0Hooni added the week2 label Jan 4, 2025
@hsw1920
Copy link
Owner

hsw1920 commented Jan 7, 2025

Q. MVVM에 대하여 설명해주세요.
A.
MVVM은 MVC 패턴의 Massive ViewController 문제를 해결하기 위해 등장한 MVC의 진화된 아키텍처 패턴입니다.
MVC와 마찬가지로 Model은 Data와 비즈니스로직을 담당하고, View는 UI를 담당하며 MVC와 달리 데이터 바인딩을 구현합니다.
Controller 대신 새로운 중재자 역할로 ViewModel이 등장하여 Model을 View에 적용하기 쉬운 형태로 변환하는 역할을 하게 됩니다.
MVC와의 차이점은 데이터 바인딩을 구현하여 Model의 변화를 알아차리고 ViewModel이 View를 업데이트 하는 tool을 Combine이나 RxSwift 등으로 구현한다는 점이 있으며, MVC보다 더 UI와 비즈니스 로직의 분리가 명확하여 테스트가 용이하다는 장점이 있습니다.
마찬가지로, ViewModel에 대한 책임이 너무 비대해지면 Massive ViewModel 문제가 일어나고 유지보수성이 감소할 수 있습니다.

답변의도

  • MVVM의 등장 배경을 설명한다.
  • Model, View, ViewModel 역할에 대한 설명한다.
  • MVC와의 차이점과 장점, 한계 등을 설명한다.

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 7, 2025

MVVM은 애플리케이션을 모델, 뷰, 뷰모델로 분리하여 구조를 나눈 아키텍처 패턴입니다.

모델은 데이터와 비즈니서 로직을 관리하고, 뷰는 사용자에게 데이터를 시각적으로 표현하며, 마지막으로 뷰모델은 뷰와 모델 간 데이터 바인딩을 통해 중재자 역할을 하며 상호작용을 합니다.

이러한 MVVM 패턴은 구조를 나눔으로서 코드의 재사용성과 유지보수성을 높이고, 데이터 바인딩을 통해 개발 편의를 향상시키는 장점이 존재합니다.

하지만 데이터 바인딩이 늘어나면 디버깅에 어려움이 생길수도 있다는 단점도 존재합니다. 또한 유연한 데이터바인딩을 위해 RxSwift나 Combine을 사용하게 되는데 이러한 프레임워크나 라이브러리 채택으로 인해 의존성이 생깁니다.

@Kiyoung-Kim-57
Copy link
Collaborator

MVVM은 Model-View-ViewModel을 합친 말이다. 기존 MVC에서 컨트롤러가 비대해지는 문제를 해결하기 위해 등장한 패턴 중 하나이다. 모델과 뷰의 개념은 MVC와 동일하게 모델은 데이터와 데이터 처리 로직, 뷰는 UI 요소와 데이터 입력과 화면상 출력을 담당한다.

MVC와 다른 점은 View Model이라는 새로운 레이어를 사용한다는 것이다. 기존에 View Controller가 담당하던 비즈니스 로직을 View Model이 담당하게 되고 View Controller는 View와 View Model을 연결하는 역할을 하며 View Model을 관측하고 그에 따른 UI 업데이트를 View에 전달하는 역할을 맡게 된다. 또한 데이터 바인딩을 적용해 View Model의 상태 변화를 자동으로 View에 반영할 수도 있다.

MVC는 View Controller가 특정 뷰에 종속되는 문제가 있어 재사용성이 좋지 않다는 문제가 있었다. 하지만 View Model은 특정 뷰에 종속되지 않아 재사용성이 좋다는 장점이 있다.
하지만 MVVM은 MVC에 비해 초기 설계가 복잡하다는 단점이 있고 MVVM도 결국에 비즈니스 로직이 많아지면 비대해진 View Model의 문제가 생길 수 있다.

이 경우 책임에 따라 View Model을 나누거나 각 비즈니스 로직들을 Use Case로 나눠 관리하는 방법을 도입할 수 있다.

@youn9k
Copy link
Collaborator Author

youn9k commented Jan 10, 2025

MVVM은 소프트웨어를 크게 Model-ViewModel-View 3개의 레이어로 나누는 소프트웨어 아키텍쳐 패턴입니다.

Model은 프로그램이 가지는 상태를 저장하고 비즈니스로직을 수행합니다.
ViewModel은 View와 Model 사이에서 데이터를 가공하고 바인딩해주는 역할을 합니다.
View는 UI로 사용자에게 보여지는 부분입니다.

MVC와 가장 다른 점은 Controller 대신 ViewModel이 있다는 점입니다.
Controller는 Model과 View를 모두 알게되고, 많은 책임을 갖기 쉽다보니 유지보수하기 힘든 구조가 되기 쉽습니다.
이러한 문제를 해결하기 위해 ViewModel을 Model과 View 사이에 두고, Model에서의 데이터를 View에서의 형태에 맞게 가공하고 바인딩하여 Presentation과 Domain을 조금 더 확실하게 분리할 수 있게 되었습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants