티스토리 뷰
MVC 란?
코드에 대한 유지보수를 어떻게 하면 편하게 할 수 있을까를 고민하다가 탄생하게 된 패턴 중 하나로
Model View Controller 약자이다.
이 MVC 패턴을 통해 애플리케이션을
Model, View, Controller 세 가지 역할로 구분함으로 유지보수가 편리하게 이루어지도록 할 수 있다.
MVC 패턴 이외에도 MVP 패턴, MVVM 패턴이 있지만 여기서는 우선 가장 간단한 MVC 패턴에 대해 살펴본다.
Model, View, Controller의 역할
Model
- 애플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분, 데이터와 관련된 일을 하는 곳
- 뷰와 컨트롤러에 의존적이지 않아 재사용 가능
View
- 사용자에게 보여지는 UI 부분을 담당하는 곳
- UI와의 상호작용에서 컨트롤러와 통신
Controller
- 사용자의 입력(Action)을 받고 처리하는 부분, model과 view를 이어주는 부분으로 중개자 역할을 한다.
- 사용자로부터 입력을 받으면 모델에 따라 뷰를 정의함
조금 더 자세히 살펴보면 일반적인 MVC는 다음과 같은 순서로 이루어진다.
안드로이드 앱에서의 MVC 패턴 예
다음과 같은 간단한 플레이리스트 앱이 있다면
아래와 같이 View, Controller, Model 세 가지로 구분하여 코드를 작성할 수 있다.
View의 xml 파일에는 화면에 보여주는 UI를 구성하며
Controller는 플레이리스트를 추가하는 로직이 포함되어 있으며
플레이리스트 추가 시 Model에 데이터가 추가되며 추가된 데이터를 반영하여 뷰를 업데이트해준다.
MVC 패턴에 맞게 코딩하는 5가지 방법
Model 내부에 컨트롤러와 뷰에 관련된 코드가 있으면 안 된다.
- 모델 클래스에서 컨트롤러와 뷰의 클래스를 import 해서 사용하면 안 된다.
- 데이터와 관련된 코드만 깔끔하게 모아 놓기 위해!
View 내부에 모델의 코드만 있을 수 있고 컨트롤러의 코드가 있으면 안 된다.
- 뷰 내부에 모델에 관련된 코드는 있어도 상관없다.
View가 모델로부터 데이터를 받을 때는 사용자마다 다르게 보여주는 데이터에 대해서만 받아야 된다.
- 뷰는 사용자한테 보이는 UI와 모델로부터 받은 데이터가 합쳐져 만들어진 화면이다.
- 공통으로 보여주는 데이터는 뷰가 자체적으로 가지고 있어야 되는 정보들이다.
Controller 내부에는 모델과 뷰의 코드가 있을 수 있다.
- 컨트롤러는 모델과 뷰의 중개자 역할을 하며 전체 로직을 구성하기 때문이다.
View가 모델로부터 데이터를 받을 때, 반드시 컨트롤러에서 받아야 된다.
- 뷰가 모델로부터 데이터를 받을 때는 컨트롤러 코드 내에서 코드 안에서만 받아야 된다.
MVC 패턴의 장단점
장점
- 구현하기 쉽고 단순하다.
- Model과 View가 분리되어 있다.
- Model의 비종속성으로 재사용 가능하다.
단점
- View와 Model 사이에 의존성이 발생하여 완벽한 분리가 어렵다.
- 앱이 커지면 Controller의 로직이 복잡해져 유지보수가 힘들다.
+ View와 Model 사이의 의존성 문제를 해결하기 위해
View와 Model을 분리하고 둘 사이의 상호작용을 Presenter가 담당하도록 하는 MVP 패턴을 사용할 수 있다.
참고
https://www.youtube.com/watch?v=ogaXW6KPc8I
'안드로이드[Kotlin]' 카테고리의 다른 글
[Database] Room이란? (1) | 2022.02.16 |
---|---|
[안드로이드/Kotlin] 목록 화면을 만들기 위한 RecyclerView (0) | 2022.02.07 |
[아키텍처 패턴] MVP 패턴이란? (0) | 2022.02.02 |
[안드로이드/Kotlin] 뷰 바인딩이란? (1) | 2022.01.22 |
[Kotlin]코루틴 (0) | 2021.11.27 |