안녕하세요!
오늘부터 TIL 도전해봅니다.
오늘은 Let's Swift 2023에 관한 글을 쓰는데 시간이 좀 걸려서 배운 내용이 많지 않아 부끄럽네요..
오늘 학습한 내용은 디자인 패턴 중 MVVM 패턴입니다.
MVC패턴을 조금 다루다 이제 MVVM 패턴에 관해 학습하고 있습니다.
학습은 MVC나 MVVM 같은 디자인 패턴이 왜 필요한지에 대한 질문으로 시작합니다.
디자인 패턴에 대해 정말 일차원적으로 생각하면 코드를 나누는 방법입니다.
그렇다면 왜 코드를 나눌까요?
사실 파일을 최소한으로 나누고 모든 코드를 몰아넣는 방식으로 코딩을 해도 프로젝트가 동작은 합니다.
하지만 프로젝트의 규모가 커질수록 유지/보수 측면에서 규칙성 없이 길게 나열된 코드는 불리하죠.
그래서 MVC 패턴을 처음 배웠었습니다.
Model에 데이터와 로직을,
View에 인터페이스 관련 코드를,
Controller는 Model과 View 사이에서 데이터를 전달하고 View의 동작을 처리하는 식으로 분리가 이루어졌습니다.
하지만 MVC 패턴은 직관적이지만 단점도 많은데요
Controller의 역할이 과도하게 큽니다.
저도 패턴을 적용해보니 View의 동작을 처리하는 과정에서 Controller의 역할이 상대적으로 크다고 느꼈었습니다.
그리고 View와 Controller사이에서 데이터를 처리하는 과정에 델리게이트도 신경써야하고 그러면 또 Controller가 복잡해졌습니다.
그래서 우스갯소리로 MVC는 Mega View Controller라고도 불린답니다.
또 View와 ViewController 사이가 연결되어 있어 개별적인 테스트가 힘들다고 합니다.
저는 View의 인터페이스를 ViewController에서 받아온 데이터를 연결하지 않고
먼저 백그라운드 컬러만 입혀서 레이아웃을 잡아서 화면에 띄웠던 것 같습니다.
그리고 레이아웃에 문제가 없는걸 확인하고 데이터랑 연결했습니다.
View와 ViewController의 데이터가 연결되면 이제 오류가 났을 때,
오류가 난 특정 부분만 확인하도록 테스트하기 어려웠던 것 같습니다.
이번에 접한 MVVM 패턴은 이러한 단점이 상대적으로 적은 디자인 패턴이라고 합니다.
MVVM패턴은 (Model - View - ViewModel)로 나뉩니다.
Model에서 데이터 처리를 하고
View에서 기존의 View의 인터페이스와 ViewController의 일부 기능을 합칩니다.
ViewModel에서는 로직을 처리합니다.
여기서 처음 접한 의존성에 관한 개념이 있는데요.
아직 정확하게 이해하지 못했는데 대략적으로 한 객체를 사용할 때 다른 객체에 영향을 받게되는 관계라고 이해했습니다.
MVVM패턴은 ViewModel은 Model에 의존하고 View는 ViewModel에 의존한다고 합니다.
그래서 기존에는 ViewController가 중간에서 역할이 커졌다면, MVVM은 일방향적인 의존관계로 그런 현상이 적다고 합니다.
view는 viewmodel을 의존합니다.
그래서 인터페이스에 쓰이는 데이터들을 ViewModel에서 받아옵니다.
그리고 UIButton()의 동작의 경우 ViewModel로 넘깁니다. (ViewModel에서 로직을 통해 실질적인 처리를 합니다.)
MVVM에 대해 조금 더 배우고 나머지 내용을 작성하겠습니다~