3.9 Concept Note - MVC 패턴

Jay·2025년 2월 6일

Level 3 - SingleView App

목록 보기
9/24

건축을 하든 요리를 하든 무언가를 전문적으로 만들때에는 오랜세월에 걸쳐 굳어진 일종의 방법론 내지 패턴이 존재할 것이다. 어플리케이션을 제작하는 것도 상당히 전문적인 분야이기 때문에 개발을 하는데 널리 쓰이는 패턴이 존재하고 그중에 가장 필수적인 MVC 디자인 패턴에 대해 공부해보자.

  • 디자인 패턴(Design pattern)은 건축학 및 컴퓨터 과학에서 사용되는 용어로, 설계 문제에 대한 해답을 문서화 하기위해 고안된 형식 방법이다. 이 방식은 건축가 크리스토퍼 알렉산더가 건축학 영역에서 고안한 것을 그 시초로 하며, 이후 컴퓨터 과학 등 여러 다른 분야에도 도입되었다. (위키백과)

MVC란 모델(Model), 뷰(View), 컨트롤러(Controller)의 약자로서 각각의 요소를 독립적으로 구성함과 동시에 유기적으로 동작하게끔 설계하는 디자인패턴이다.

첫 번째 등장하는 Model은 어떠한 대상의 정보를 의미한다. 이해를 돕기위해 실생활에서의 고양이와 이를 피해다니는 자동차를 예로 들어 설명해 본다면 다음처럼 정리해 볼 수 있을 것이다.

어떠한 대상을 표현하려면 그 대상이 지니는 특징에 해당하는 속성(Attributes)과 행위(Behavior)로 구분해 볼 수 있다.

뷰(View)는 말그대로 사용자에게 보여지는 요소이다. 사용자는 오직 뷰를 보고 터치(Touch)나 스와이프(Swipe)를 통해 앱과 상호작용한다.

컨트롤러(Controller)는 내부에서 뷰와 모델을 조정하는 역할을 한다.
사용자가 뷰에서 자동차를 어떤 방향으로 끄는 동작을 했다면 그 내용이 컨트롤러에 입력되고 해당정보를 토대로 자동자 모델의 속성중 위치(Location)를 변경하여 다시 뷰에 출력한다.

그럼 작성한 모델을 구체적인 코드로 표현해보자.

보통 하나의 모델을 하나의 클래스로 작성해 볼 수 있는데 속성은 프로퍼티, 행위는 메서드로 정의한다.

뷰는 인터페이스빌더에서 뷰컨트롤러내의 뷰에 특정 이미지를 넣거나 버튼, 레이블 등등 개발자가 원하는 요소들을 조합하여 제작 할 수 있다.(물론 코드로도 구현 가능하다)

그렇다면 컨트롤러는 무엇인가? 그동안 ViewController라는 클래스에 코드를 작성해봤는데 그것이 바로 컨트롤러를 만드는 작업이다.
ViewController 클래스는 뷰와 모델이 서로 상호작용할 수 있도록 조정하는 컨트롤러 역할의 코드인 것이다.

정리해보면 최초에 싱글뷰 어플리케이션을 선택하여 자동으로 생성되는 ViewController 는 말그대로 뷰+컨트롤러이며 뷰는 뷰컨트롤러안에 내장되어 있는데 인터페이스빌더에서 편집이 가능하고 물론 코드로도 만들수 있다.

뷰와 컨트롤러는 강하게 결합되어 있어 구분이 어렵기 때문에 중요한것은 모델을 구분하는 것이다.
물론 컨트롤러안에 모델을 합쳐서 구현해도 똑같이 기능하도록 만들수 있다.
문제는 버그나 에러를 찾기가 어렵고 코드의 재사용성이나 유지보수 측면에서 이로울것이 하나도 없다는 것이다.

  • 모델(Model) - 앱의 데이터와 그것을 어떻게 핸들링 할 것인지(가공할 것인지)에 대한 정의 등을 소유한 객체로서 컨트롤러에 의해 내부 데이터가 업데이트 되거나 실행된다.

  • 뷰(View) - 사용자에게 화면을 보여주어 상호작용하고 특정 이벤트를 받아 컨트롤러에 보고한다.

  • 컨트롤러(Controller) - 모든 작업을 조정하는 중재자로서 받은 이벤트를 분석하여 모델을 업데이트 하고 업데이트된 모델을 바탕으로 뷰를 업데이트한다.

MVC패턴의 핵심은 이렇게 역할을 분담하여 상호 유기적으로 동작할 수 있도록 구현하는 것이다.
한 회사내에서도 각자의 역할이 모호하고 서로간의 보고체계가 불명확하다면 틀림없이 문제가 생길 것이고 규모가 커지면 커질수록 문제가 발생하는 빈도는 비례할 것이 자명하다.
MVC 패턴 외에도 MVP, MVVM 등 다양한 패턴이 존재하지만 모든 디자인 패턴의 존재이유는 공통적으로 코드를 분리하여 의존도를 낮추고 재사용함으로써 테스트와 유지보수를 용이하게 하려는 데 의의가 있다.

디자인패턴은 상당히 방대한 분야이므로 좋은 개발자가 되려면 꾸준히 학습하는 것이 좋다.
이제부터 MVC 패턴에 입각하여 체계적인 어플리케이션을 제작해 보자.

상술한 바와 같이 ViewController 내에 뷰와 컨트롤러가 강하게 결합되어 있어 현재 iOS 에서 MVC패턴은 잘 쓰이지 않지만 기초를 다지는 측면에서 살펴본다.

profile
Software Engineer Specialized on iOS

0개의 댓글