예전에 [CS 전공지식 노트] 라는 책에서 얼핏 읽었었던 부분이었다. 디자인 패턴이라는 주제가 처음에는 UI와 관련된 부분도 다루나? 라고 생각하고 가볍게 훑어만 봤던 것 같다. CS라고 하면 흔히 아는 자료구조, 알고리즘, 네트워크 등을 더 중점적으로 봤던 것 같다. 하지만 클린코드를 작성하는 과정에서 우연히 MVC 패턴이라는 것을 알았고 내가 작성하는 코드에 접목시켜보면 좋을 것 같다라는 생각이 들었다.
우선 간단하게 말하자면 MVC pattern
은 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다. 한마디로 소프트웨어의 문제를 해결하는 방식으로 정의할 수 있다. 아래에서 더 구체적으로 살펴보자.
MVC는 M(Model)
, V(View)
, C(Controller)
를 의미한다.
Model
의 핵심은 앱에 포함되어야할 데이터가 무엇인지 정의하는 역할이다. MVC 패턴으로 구성된 소프트웨어에서 데이터를 갖고 있는 요소는 Model
이다.
Model
이 포함해야 한다.Model
은 View, Controller에 대한 어떤 정보도 알지 못한다.View
의 핵심은 앱의 데이터를 보여주는 방식을 정의하는 역할이다. MVC 패턴으로 구성된 소프트웨어에서 사용자에게 보여지는 영역에 관한 로직은 View
가 실행하는 것이다.
View
는 Model, Controller에 대한 어떠한 정보도 알지 못한다.Controller
의 핵심은 앱의 사용자로부터의 입력에 대한 응답으로 Model, View를 업데이트 하는 역할이다. MVC 패턴으로 구성된 소프트웨어에서 사용자의 입력과 같은 특정 이벤트가 발생했을 때 Model과 View의 상태를 변경해주는 로직을 Controller
가 수행한다.
Controller
는 Model과 View에 대한 정보를 알고 있어야 한다.Model
과 View
의 변경을 모니터링해야 한다.MVC pattern
은 비즈니스 로직과 UI로직을 분리하여 유지 보수를 독립적으로 수행할 수 있다는 장점이 있지만 뷰는 컨트롤러에 연결되어 화면을 구성하기 때문에 구현하고자 하는 서비스의 규모가 커지면 뷰의 개수가 많아질 수 있다는 단점이 있다.