TIL 30

오늘 한 일 / 배운점

  • 9/13 9:30 팀 데일리 스크럼
  • iOS 앱개발 심화 KDT 실무형 iOS 앱 개발자 양성과정 수강
  • 9/13 19:00 실시간 세션 : MVVM (HH튜터님)

과제

  • iOS 앱개발 심화 개인 과제(~9/22 14:00)

느낀점

오늘은 MVVM에 대해서..

MVVM 패턴이란 Model - View - ViewModel의 약자로
말 그대로

  1. Model : 데이터와 비즈니스 로직(데이터 조작을 수행)
  2. View : 앱의 시각적 요소 담당
  3. ViewModel : 모델과 뷰 사이의 중간다리 역할. 뷰와 상호 작용하면서 UI에 표시할 데이터를 처리하고 뷰로부터 입력을 받아 모델에 전달

이다

내가 정확하게 이해 했는지는 모르겠지만 아래와 같이 정리해 보았다

1 이렇게 코드를 3개로 분리하여
View와 Model 사이에 ViewModel이 가로막아 View로부터 비즈니스로직을 완전히 분리해버린다
그렇게 함으로써 View는 UI 관련 작업만 간결하게 적을 수 있고,
ViewModel을 통해서 중간에서 데이터 관련된 처리를
Model은 데이터와 비즈니스로직을 관리한다

나는 처음에 ViewModel의 역할이 ViewController의 역할과 겹치는 게 아닌가 했는데
UIKit은 ViewController에서, 그 외에 Model에 대한 조작이나 나머지 것들은 ViewModel이 수행한다고 보면 된다고 한다.

MVC 패턴을 생각하면 Controller에서 View 떼내고 Model 때 버리면
Controller에는 그 외 모든 잡다한 게 다 남아버리는데 (=Controller가 비대해짐) 여기서 MVVM 패턴으로 ViewModel을 만들어서 Model과 관련된 로직을 또 분리해서 Controller를 보다 가볍게 덜어낼 수 있는 것이다! 이렇게 ViewModel이 중간에 끼여 들어감으로써 View와 Model을 느슨하게 연결할 수 있고
MVC 패턴에 비해 Controller가 덜 비대하기 때문에 코드를 더 쉽게 유지 보수할 수 있게 해준다.
프로젝트가 작으면 MVVM의 장점을 체감하지 못할 수도 있는데 프로젝트가 커질수록 Controller는 너무 커질수밖에 없고
그러면 코드가 꼬여있게 되고 복잡해지니까 이것을 비즈니스로직 단위로 덜어내고 정리를 할 수 있는 것이다.

한 가지 오늘 튜터님이 말씀하신 건 그렇다고 무조건 MVVM이 옳고 좋다는 건 아니라는 것.
MVC가 가지고 있는 문제는 뷰랑 모델 걷어내면 컨트롤러만 비대해져 있다는 건데
그런 문제가 없다면 어쩌면 MVVM은 굳이 필요하지 않을 수도 있다
결국 편하고 더 쉽게 개발을 하기 위해서 위 아키텍처 패턴대로 하는 건데 공고에서 많은 회사들이 MVVM 경험을 요구하니까 MVVM 패턴대로 개발해야 한다! 이러기보다는 적합한 패턴으로 구현하는 게 중요하다고 하셨다

생각해 보면 오늘 실시간 세션 앞쪽에서 MVC 패턴도 잠깐 나왔는데
전에 MVC 패턴대로 짜서 제출한 과제도 생각해 보면 ViewController가
뷰와 컨트롤러 두 가지 기능을 했던 것 같다 -_-;
다음에 코드 짤 때는 한번 칼같이 지켜서 짜봐야겠다고 생각했고

여기서 데이터 바인딩을 할 때
Combine 또는 RxSwift가 쓰인다고 하는데
데이터 바인딩이며 아직 하나도 모르겠다 ㅋㅋ..
이번 과제 필수 구현 사항으로 MVVM으로 구현하라는 게 있어서
그때 직접 해보면서 더 익혀봐야겠다