티스토리 뷰

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 

https://velog.io/@jojo_devstory/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%ED%8C%A8%ED%84%B4-MVC%EA%B0%80-%EB%AD%98%EA%B9%8C

 

안드로이드 아키텍처 패턴 - MVC가 뭘까?

이번엔 아키텍쳐 디자인 패턴을 말할때 가장 많이 쓰이면서 기본이 되는 MVC에 대해 간략하게 설명 해보려 합니다. 경험상 제가 막 개발자 커리어를 시작한때에도 스타트업에 안드로이드 개발자

velog.io