최근에 과제를 진행하면서, 다른 분들이 아키텍처 패턴에 대해 많이 어려워하시는 것 같아서
저도 공부할 겸 다시 정리해보겠습니다.
먼저 아키텍처 패턴이란 무엇일까요?
아키텍처 패턴 은 주어진 컨텍스트 내에서 소프트웨어 아키텍처 에서 일반적으로 발생하는 문제에 대한 일반적이고 재사용 가능한 해결책입니다 . - 위키백과
역시 위키백과는 너무 어렵습니다. 일단 소프트웨어 아키텍처에 대해서도 찾아봤습니다.
소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다.
소프트웨어 아키텍처는 복잡한 시스템을 "지적으로 이해할 수 있는" 추상화이다. - 위키백과
즉, 소프트웨어 아키텍처는 시스템 구축 전에도 이해할 수 있게 짜놓는, 말 그대로 구조입니다.
그럼 아키텍처 패턴은? 말그대로, 아키텍처의 패턴입니다.
마치 우리가 게임을 할 때 보스의 공격 패턴이나,

스우 전깃줄 패턴 - 소환모션 2.5초 이후 전깃줄이 나옴
이런 줄무늬 패턴의 옷에서 사용하는 패턴을 생각하면,
아키텍처가 반복돼서 사용된다고 이해하면 될 것 같습니다.
이런 모바일 앱 아키텍처 패턴 중 가장 처음 접하는 패턴,
자연스럽게 쓰게 되는 패턴인 MVC는, Model-View-Controller의 줄임말입니다.
여기서 Model은 데이터, View는 화면,
Controller는 사용자와의 상호작용을 받아서 Model을 업데이트하고, 이를 표현할 View를 선택합니다.
대신 이러다보니, Model 데이터 변화에 따라 View를 직접적으로 바꾸다 보니,
둘 사이의 의존성이 강합니다. 이를 해결하기 위해 등장한 것이 MVP 패턴입니다.
MVP 패턴은 Model-View-Presenter의 줄임말입니다.
기존의 MVC는 Controller가 입력을 받고, 데이터를 업데이트하고, 뷰를 선택한 뒤, 모델 데이터로 뷰를 업데이트한다면,
MVP는 View에서 입력을 받아서, Presenter를 거치고 Model에 해당 내용을 전달합니다.
그리고 Model의 변경사항을 다시 Presenter를 거쳐 View를 업데이트합니다.
이를 통해 Model과 View의 의존성 문제는 해결됐지만, Presenter와 View가 1:1 관계로, 다시 의존성이 강해지게 됩니다.
그래서 선택하게 된 패턴이 MVVM 입니다.
MVVM은 Model-View-Viewmodel의 줄임말입니다.
Viewmodel은 Model과 상호작용해, 데이터를 View에서 참조할 수 있게 해줍니다.
대신, Viewmodel은 View를 알 수 없기에, 1:n 관계로, 서로 의존적이지 않습니다.
이것이 가능한 이유는, LiveData나 Flow처럼 옵저빙할 수 있기 때문입니다.
오늘은 가볍게 패턴을 정리해봤습니다. 지금 과제 진행 중이라, 코루틴을 공부 못하는 게 좀 아쉽네요.
끝.