개발자 채용 공고를 보면 MVVM 이라는 패턴을 심심찮게 볼 수 있으며, 우대 사항에 있는 경우가 대부분이다. 뭔지는 지금 당장은 모르더라도 MVVM 패턴이 뭔지 알고 적용할 수 있다면 분명 취업에 유리하게 적용할 것은 분명해 보인다.
여기서 MODEL은 비즈니스 로직을 담당하고, VIEW는 UI, VIEWMODEL은 이벤트 처리 등을 담당한다.
비즈니스 로직이라고 거창하게 적긴하였지만 어렵게 생각 할 필요 없이, 앱을 작동하게 만드는 소프트웨어를 담당하는 부분이라고 보면 된다. 예를 들면 api에 접근해서 어떻게 데이터를 가져올 것인가, retrofit안의 interface를 어떻게 구현할 것인가 등등이 있을 것이다.
MVVM 패턴을 공부하기 전에, 디자인 패턴부터 알아야 한다. 디자인 패턴이란, 오랜 시간 전부터 위대한 개발자들이 만들어 놓은 틀 같은 것이다.
그 사람들도 있는 욕, 없는 욕 다해가면서 개발을 하다가 어떤 '틀'에 맞춰서 개발을 하면 좀 더 편리하다는 것을 알게 되었고, 그 틀이 바로 디자인 패턴이다.
개발 공부를 하다보면 별에 별 용어가 다 튀어나온다. 의존성, 확장성 등등이 튀어나오는데, 주로 "의존성이 적어 효율적이다","확장성이 좋아 효율적이다" 라는 말이 등장한다.
의존성이 적어 효율적이라는 말이 무슨 말인가?
영화에 빗대어서 설명을 해보겠다. 적벽대전이라는 영화를 아는가? 조조와 손권이 패권을 두고 벌였던 전투 중 하나인데, 영화로도 제작된 영화이다.
조조는 수전을 벌일 때, 파도에 배가 휩쓸려 갈 것을 대비해서 배들을 서로 묶어놓았다. 후에 이것이 참패의 원인이 되고 만다.
주유는 "배를 묶어 놓았으니, 하나의 배에 불을 지르면 전부 다 태울 수 있다" 라고 생각하였고, 실제로 그 공격은 대성공이었으며, 조조는 이 전투에서 크게 패하고 만다.
조조의 배들을 두고 의존성이 높다고 한다. 하나의 서비스는 여러가지 객체로 이루어져 있는데, 그 객체들끼리 의존도가 높은 경우와 낮은 경우가 있다고 하자.
하나의 객체에 버그가 발생했다고 하자. 의존도가 높으면 그 버그는 다른 객체에도 영향을 끼칠 것이고, 그럼 그 버그를 고치는데에 시간이 오래 걸릴 것이다. 하나의 객체만 해결하면 될일을 여러 객체를 손봐야 할 수도 있기 때문이다.
버그가 발생한 객체만 해결하면 되기 때문에 효율적이다.
1.view를 통해서 이벤트가 발생한다,(ex. touch,voice record...)
2.기본적으로 이벤트가 발생하면 그 이벤트는 다른 곳에 요청사항을 보낸다(request). 여기서 그 다른곳은 viewModel이다.
3.viewModel은 view에게서 받은 입력값을 받아 그를 토대로 Model에게 데이터를 요청합니다.
4.Model은 viewModel에게 요구받은 데이터를 전달합니다(reponse).
5.viewModel은 view와 databinding되어있기 때문에 view에 사용자가 원한느 데이터를 보여줍니다.
여기서 문서에는 databinding을 사용하기 때문에 view와 viewModel간에는 의존성이 없다고 합니다.
이 부분은 좀더 자세히 공부해서 포스팅하겠습니다.
MVVM패턴은 의존성이 적기 때문에 효율적인 디자인 패턴이다.
디자인 패턴은 개발자들이 집단지성으로 만들어낸 하나의 규칙, 툴이다.
Model은 data를 처리하는 비즈니스로직을 담당한다.
view는 UI(User Interface)를 담당한다.
viewModel은 view와 databinding 되어 있어 viewModel에 있는 데이터를 보여줄 수 있다.