MVC, MVC, MVC 패턴이란?
프로그래밍 공부를 시작해본 사람이라면 한 번쯤은 들어봤을 것이다.
그만큼 Java 뿐만 아니라 여러 프로그래밍 언어에서 사용되고 있다.
MVC 패턴이란 Model, View, Controller의 약자이며
어플리케이션을 개발하는 프로젝트에서 각 구성 요소들을 MVC 세가지의
역할로 구분한 프로그래밍 디자인 패턴 중 하나이다.
도메인로직과 UI로직을 분리해 유지보수의 독립성을 보장할 수 있는 장점이 있지만
잘못 사용할 경우 서로간의 종속성이 발목을 잡을 수도 있는 단점도 존재한다.
말로는 모델, 뷰, 컨드롤러 라고한다.
하지만 처음 사용해보면 위 단어들을 이해하지 못한다.
모델은 어플리케이션에 필요한 데이터와 비지니스 로직들을 관리한다.
어플리케이션에 필요한 데이터를 정의하고, 데이터의 상태를 관리한다.
뷰와 컨트롤러와는 어떠한 관계가 있어서는 안된다.
데이터 업데이트를 진행할 때 모델에서 UI를 직접 건드린다는 일은
Model을 사용하는 의미가 없는 것과 다름없다.
뷰는 간단히 어플리케이션의 Input text, Output text를
사용자에게 UI로 보여주는 출력을 담당한다.
벨로그에 사용자가 로그인을 하고 글을 쓰면 도메인 모델에서
저장해 놓은 상태를 사용자에게 시각적으로 보여준다.
사용자가 뷰를 통해 입력을 하면 컨트롤러를 통해서 모델에 전달한다.
뷰에서는 모델이 가져야 하는 데이터를 저장하는 일은 허용하지 않고
모델과 마찬가지로 뷰는 모델과 컨트롤러를 건드리면 안된다.
컨트롤러는 사용자의 입력을 기반으로 모델 또는 뷰를 조작하는 로직을 갖고있다.
사용자가 어플리케이션에서 자신이 원하는 정보를 모델과 뷰 사이에서 조율하는 역할을 수행한다.
모델, 뷰와는 다르게 컨트롤러는 서로간의 조율을 위해 모델, 뷰와 관계가 있다.
때문에 모델과 뷰의 업데이트가 발생할 시 그 결과를 모델과 뷰에게 알려야한다.
물론 이렇게 기본적인 설명을 들어도 이해가 잘 안됐다.
주변에서 볼 수 있는 조금 더 간단한 예시를 생각해봤다.
집에 있는 고양이 자동 급식기다. 급식기 본체에 사료를 넣고 지정한 시간에 고양이의 사료가 원하는 만큼 나온다.
그럼 고양이 사료 자동 급식기의 어디가 모델이고,뷰이고,컨트롤러인가?
자동급식기의 본체를 어플리케이션 자체라고 생각해보자
여기서 사료를 데이터라고 가정할 경우 모델은 사료를 담는 사료통을 모델이라고 할 수 있을 것이다.
모델에 저장되어있는 데이터(사료) 가 컨트롤러로 지정한 시간에 데이터(사료) 를 나오게한다.
컨트롤러를 통해 모델에서 나온 데이터(사료) 가 뷰(그릇) 에 담긴다.
뷰(그릇) 에 담겨 시각적으로 보이는 데이터(사료) 를 사용자(고양이) 가 먹는다.
비유가 조금 빈약하고 MVC란 개념이 이게 다라는게 아니지만,
처음 보는 사람들도 이해가 가능하면 좋겠다란 생각으로 최대한 쉽게 생각해봤다.
MVC 패턴을 글로만 공부하던 중 고양이 밥을 주러 갔다가
어라? 이게 MVC 아닌가? 라는 생각으로 예시를 적어봤다.
딱 이거다 하는 느낌이 없었는데 이러한 비유를 들어보니
개인적으로 조금 더 와 닿은 느낌이다.
물론 많은 디자인 패턴이 존재하고, MVC 또한 더 깊은 부분이 많지만
아직 갈 길이 머니까 지금은 이렇게 하나씩 알아가는 것에 만족하자