MVC와 MVVM

·2023년 3월 9일
2

개발 지식

목록 보기
41/96
post-thumbnail

MVC(Model-View-Controller) 패턴

컴퓨터로 작업하는 것들이 늘어나게 되면서, 보급양이 점점 늘어나게 되었고, 일반인 관점에서도 컴퓨터 프로그램에 쉽게 접근하도록 GUI 가 강조되었다. 이때, 사람이 정보를 인식하는 방법과 컴퓨터가 정보를 인식하는 방법이 서로 다르다는 점에서 연구가 진행되었고, 이 두 부분을 서로 분리하여 정의한 것이 오늘 날 MVC 패턴의 시초가 되었다.

Model, View, Controller 세 가지의 역할로 구성된 소프트웨어 디자인 패턴이다. 각각의 역할은 다음과 같다.

  1. Model: 애플리케이션에서 정보 및 데이터를 관리하는 역할을 담당한다. 데이터 조회 요청이나 생성, 가공 하는 비즈니스 로직 작업 전반이 Model 에서 이루어진다.

  2. View: 사용자가 보게 될 결과 화면을 렌더링 하는 역할을 담당한다. 사용자 눈에 보이는 프레젠테이션 로직 작업 전반이 View 에서 이루어진다.

  3. Controller: Model 과 View 의 중간다리 역할로, 사용자 요구에 맞추어 Model 로 부터 데이터를 얻어오거나, View 로부터 받은 이벤트 혹은 입력 데이터를 Model 에 건네주는 역할을 한다. 프로그램 운영에 본질적으로 필요한 함수 호출이 이루어지는 어플리케이션 로직 전반의 작업이 Controller 에서 이루어진다.

MVC 패턴의 장점

  • Model, View, Controller 등 역할이 명확히 분리되어 있기 때문에, 코드의 가독성이 증가한다.
  • 작업마다 코드가 분리되어 있기 때문에 재사용성이 높아지며 이는 효율적이 업무 결과를 가져온다.

MVC 패턴의 단점

  • 어플리케이션 생태계가 커질수록, 필연적으로 다수의 모델과 다수의 뷰가 서로 엮여 테스트 및 이슈 해결이 어려워진다. 이러한 형태의 MVC를 Massive View Controller 라고 부른다. 이는 MVC의 한게를 표현한 용어이다.

MVVM(Model-View-ViewModel) 패턴

MVC 패턴을 기반 응용 패턴으로, View와 Model 사이에서 ViewModel을 두어, View와 Model의 결합도를 낮춘 패턴이다.

MVVM 패턴은 Model, View, ViewModel 세 가지의 역할로 구성된 소프트웨어 디자인 패턴이다. 각각의 역할은 다음과 같다.

  1. Model: 애플리케이션에서 정보 및 데이터를 관리하는 역할을 담당한다. 데이터 조회 요청이나 생성, 가공 하는 비즈니스 로직 작업 전반이 Model 에서 이루어진다.

  2. View: 사용자가 보게 될 결과 화면을 렌더링 하는 역할을 담당한다. 사용자 눈에 보이는 프레젠테이션 로직 작업 전반이 View 에서 이루어진다.

  3. ViewModel: View를 표현하기 위해 만든 View를 위한 Model 로써, 기존 Controller의 요청을 옵저버 패턴을 활용하여 간접적으로 View에서 ViewModel로 보내도록 한다. ViewModel은 Model을 기반으로 결과물을 도출한다. View는 ViewModel 의 결과물만 참조하여, 렌더링하게 된다.

MVVM 패턴의 장점

  • View 와 Model 의 결합도가 낮아져, MVC 대비 테스트나 유지보수가 용이하다.

  • 병렬 작업이 가능해진다. UI 디자인 작업물이 아직 나오지 않더라도, ViewModel 과 Model 에 대한 작업을 먼저 시도하는 것이 가능하다. 즉 디자이너와 개발자간 협업이 자유로워진다.

MVVM 패턴의 단점

  • 객체 지향 외에도, 옵저버 패턴이나 service, dao 등의 역할 등의 선행 지식이 필요하다.

  • MVC 패턴 대비 더 많은 파일과 코드를 필요로 한다.

참고
Business Logic vs. Application Logic: The Key Differences You Need to Know | APIsec
MVC 창시자가 말하는, MVC의 본질
MVVM 패턴

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글