MVC 패턴이란?

Paul Mo·2023년 10월 30일
0

MVC Pattern

Model-View-Controller (MVC) 디자인 패턴은 애플리케이션 내의 객체들에게 모델(model), 뷰(view), 또는 컨트롤러(controller) 중 하나의 역할을 할당한다. 이 패턴은 애플리케이션에서 객체들이 수행하는 역할뿐만 아니라, 객체들이 서로 통신하는 방식도 정의하는데, 세 유형의 객체 각각은 추상적 경계로부터 다른 객체들과 통신하며, 이러한 경계를 통해 서로 분리된다.

MVC 패턴을 사용하면 여러 이점이 있다. 애플리케이션의 많은 객체들은 재사용성이 더 높아지며, 그 객체들의 인터페이스를 보다 명확하게 정의할 수 있다. MVC 디자인을 가진 애플리케이션은 다른 애플리케이션보다 더 쉽게 확장 가능하다는 점도 또 다른 MVC 패턴의 장점이다. 또한 많은 Cocoa 기술과 아키텍처는 MVC에 기반하고 있으며, 사용자 지정 객체들이 MVC 역할 중 하나를 수행하도록 요구한다.

Model Objects

모델 객체는 애플리케이션에 특화된 데이터를 캡슐화하고 해당 데이터를 조작하고 처리하는 로직과 계산을 정의한다. 예를 들어, 모델 객체는 게임의 캐릭터나 주소록의 연락처를 나타낼 수 있다. 모델 객체는 다른 모델 객체들과 일대일 또는 일대다의 관계를 가질 수 있으며, 때로는 애플리케이션의 모델 층이 하나 이상의 객체 그래프로 효과적으로 구성됩니다. 애플리케이션의 영속 상태로부터 파생되는 많은 데이터(그 영속 상태가 파일이나 데이터베이스에 저장되는지 여부에 상관없이)는 애플리케이션에 로드된 후 모델 객체에 위치해야 한다. 모델 객체는 특정 문제 영역과 관련된 지식과 전문성을 나타내기 때문에 유사한 문제 영역에서 재사용될 수 있다. 이상적으로 모델 객체는 데이터를 표시하고 사용자가 해당 데이터를 편집할 수 있게 하는 뷰 객체와 명시적인 연결을 가지지 않아야 합니다.

Communication: View에서 사용자의 행동으로 데이터를 생성하거나 수정하는 경우, 컨트롤러 객체를 통해 통신되어 모델 객체가 생성 또는 업데이트된다. 모델 객체가 변경되면, 예를 들어 네트워크 연결을 통해 새로운 데이터를 받는 경우, 해당 정보를 알린 후 컨트롤러 객체가 적절한 뷰 객체를 업데이트한다.

View Objects

뷰 객체는 사용자가 볼 수 있는 애플리케이션 내의 객체이다. 뷰 객체는 자신을 그리는 방법을 알고 있으며 사용자의 동작에 반응할 수 있다. 뷰 객체의 주요 목적은 애플리케이션의 모델 객체로부터 데이터를 표시하고 해당 데이터를 편집할 수 있도록 하는 것이다. 그럼에도 불구하고, MVC 애플리케이션에서 뷰 객체는 일반적으로 모델 객체와 독립적이다.

Communication: 뷰 객체는 애플리케이션의 컨트롤러 객체를 통해 모델 데이터의 변경 사항을 알게 되며, 사용자가 시작한 변경 사항(예: 텍스트 필드에 입력된 텍스트)은 컨트롤러 객체를 통해 애플리케이션의 모델 객체로 전달된다.

Controller Objects

컨트롤러 객체는 애플리케이션의 하나 이상의 뷰 객체와 하나 이상의 모델 객체 사이에서 중개자 역할을 한다. 따라서 컨트롤러 객체는 뷰 객체가 모델 객체의 변경 사항을 알게 하는 경로이자 그 반대의 역할을 수행한다. 그리고 컨트롤러 객체는 애플리케이션의 설정 및 조정 작업을 수행하며 다른 객체들의 라이프 사이클을 관리할 수 있다.

Communication: 컨트롤러 객체는 뷰 객체에서 발생한 사용자 작업을 해석하고 새로운 또는 변경된 데이터를 모델 층으로 전달한다. 모델 객체가 변경되면, 컨트롤러 객체는 새로운 모델 데이터를 뷰 객체에 전달하여 데이터를 표시할 수 있도록 한다.

MVC with UIKit

MVC 디자인 패턴을 기반으로 구성된 대표적인 IOS의 Framework는 UIKit이다. UIkit의 구조가 어떻게 MVC로 구성되었는지 Apple의 공식 문서를 통해서 간단하게 알아보자.

UIKit 앱의 구조는 Model-View-Controller(MVC) 디자인 패턴을 기반으로 하며, 객체들이 목적에 따라 구분한다. 모델 객체는 앱의 데이터와 비즈니스 로직을 관리하고, 뷰 객체는 데이터의 시각적 표현을 제공하며 컨트롤러 객체는 모델과 뷰 객체 사이를 연결하여 적절한 시간에 데이터를 이동시킨다.

위의 이미지는 UIKit 앱의 보통 사용되는 전형적인 구조를 보여준다. 앱의 데이터 구조를 나타내는 모델 객체를 제공한다. UIKit은 대부분의 뷰 객체를 제공하지만 필요에 따라 데이터에 맞는 사용자 정의 뷰를 정의할 수 있다. 데이터 객체와 UIKit 뷰 간의 데이터 교환을 조정하는 것은 뷰 컨트롤러와 app delegate 객체이다.


참조:

profile
프론트 엔드 개발자

0개의 댓글

관련 채용 정보