본문 바로가기

Android

모델-뷰-컨트롤러, MVC

# MVC란?


안드로이드 어플리케이션은 모델-뷰-컨트롤러(MVC)라는 아키텍처에 맞추어 설계된다.

우리 애플리케이션의 어떤 객체든 모델 객체 또는 뷰 객체 또는 컨트롤러 객체가 되어야 한다는 것이 MVC의 주요 관점이다.



  • 모델 객체들은 애플리케이션의 데이터와 "비즈니스 로직"을 갖는다.

    모델 클래스들은 우리 앱과 관계가 있는 것들을 모델 객체로 만들기 위해 설계된다.

    모델 객체들은 사용자 인터페이스를 모른다.

    데이터를 보존하고 관리하는 것이 유일한 목적이다.

    안드로이드 어플리케이션에서 모델 클래스들은 일반적으로 우리가 생성하는 커스텀 클래스들이다.

    

  • 뷰 객체들은 자신을 화면에 그리는 방법과 터치나 마우스 클릭과 같은 사용자의 입력에 응답하는 방법을 안다.

    화면에 볼 수 있는 것이라면 뷰 객체이다.

    보통 xml 레이아웃 파일의 요소들로부터 만들어지는 위젯들로 구성된다.


  • 컨트롤러 객체들은 뷰와 모델 객체들을 결속시키며, "애플리케이션 로직"을 갖는다.

    컨트롤러 객체들은 뷰 객체에 의해 촉발되는 다양한 이벤트들에 응답하고, 모델 객체 및 뷰 계층과 주고받는 데이터의 흐름을 관리하기 위해 설계된다.

    안드로이드에서 컨트롤러는 일반적으로 Activity, Fragment, Service의 서브 클래스이다.






※ 뷰와 모델 객체는 서로 직접 통신하지 않는다.

   컨트롤러가 중간에 위치하여 A 객체로부터 메시지를 받아서 B 객체에게 지시를 전달해준다.





# MVC의 장점


1. 애플리케이션 설계와 이해에 도움이 된다. 

어플리케이션의 기능이 많아질수록 복잡해서 이해하기 어려울 수 있다.

따라서 코드를 클래스들로 분리하면 설계에 도움이 되고 전체를 이해하기 쉬워진다.

개별적인 변수와 메소드 대신 클래스 관점으로 생각할 수 있기 때문이다.


이처럼 클래스들을 모델과 뷰, 그리고 컨트롤러 계층으로 분리하면 애플리케이션 설계와 이해에 도움이 된다.

개별적인 클래스 대신 계층의 관점으로 생각할 수 있기 때문이다.


2. 클래스를 더 쉽게 재사용할 수 있게 해준다.

여러가지 일을 혼자서 처리하는 클래스보다는 제한된 책임을 갖는 클래스를 재사용하는 것이 더 쉽기 때문이다.




# Q. MVC와 refactoring의 차이점은?