[Swift] MVC Design Pattern이란?

seokhoho·2023년 11월 30일
0

swift

목록 보기
1/5

애플 개발자 라이브러리 MVC 링크

MVC 디자인 패턴이란?

MVC 디자인 패턴은 앱의 객체(objects in an application)에 모델, 뷰, 컨트롤러 세 가지 역할 중 하나를 할당하는 것

객체가 수행하는 역할의 정의 뿐만 아니라 서로 통신하는 방식도 정의한다.

세 가지 유형의 객체는 각각 추상적인 경계로 서로 분리되어 있으며 이러한 경계를 넘어 다른 유형의 객체와 통신한다.

MVC 디자인 패턴을 사용해서 얻는 이점

  • 애플리케이션의 객체는 재사용이 용이하다
  • 해당 인터페이스가 잘 정의되는 경향이 있다 << 무슨말?
  • 다른 애플리케이션보다 더 쉽게 확장이 가능하다 (확장하는데 용이하다)

    ---(User action)--->        ---(Update)--->
[View]           [Controller]          [Model]
    <---(Update)------        <---(Notify)----




모델 객체(Model Objects)

모델은 앱 관련 데이터를 캡슐화하고 해당 데이터를 조작하고 처리하는 논리와 계산을 정의한다. (ex. 게임의 캐릭터, 주소록의 연락처)

모델 객체는 다른 모델 객체와 일대다(1:N) 관계를 가질 수 있다.

앱이 지속 상태의 일부인 데이터의 대부분(해당 지속 상태가 파일 또는 데이터베이스에 저장되었는지 여부)은 데이터가 앱에 로드된 후 모델 객체에 상주해야한다

이 말은 앱을 실행되고 데이터를 앱에 가져오면 데이터가 모델 객체에 있어야 한다는 말같다. 한마디로 모델 객체에 데이터가 저장될 공간이 있어야한다는 말로 해석된다.

모델객체는 특정 문제 영역과 관련된 지식과 전문 지식을 나타내기 때문에 유사한 문제 영역에서 재사용할 수 있다.

재사용이 용이하다?

모델 객체는 데이터를 표시하고 사용자가 해당 데이터를 편집할 수 있도록 하는 뷰 객체(View Objects)에 명시적으로 연결되어 있지 않아야 하며, 사용자 인터페이스 및 프레젠테이션 문젱와 관련이 없어야한다.

통신

데이터를 생성하거나 수정하는 뷰 계층의 사용자 작업은 컨트롤러 객체(Controller Objects)를 통해 전달되며, 모델 객체가 생성되거나 업데이트된다.

뷰에서 사용자의 작업이 컨트롤러 객체를 통해 모델로 전달되어 모델 객체가 생성되거나 업데이트된다.

모델 객체가 변경되면 컨트롤러 객체에 알리고, 컨트롤러 객체는 적절한 뷰 객체를 업데이트한다.

모델 -> 컨트롤러 -> 뷰 


모델 한 줄 요약

모델은 데이터를 담당하고, 모델과 뷰의 직접적인 연결이 없으며 컨트롤러를 통해 정보가 전달된다.



뷰 객체(View Objects)

뷰 객체는 사용자가 볼 수 있는 앱의 객체, 뷰 객체는 스스로 그리는 방법을 알고 있으며 사용자의 작업에 응답할 수 있다.
주요 목적은 앱 모델 객체의 데이터를 표시하고 해당 데이터를 편집할 수 있도록 하는 것.
일반적으로 MVC 앱에서 모델 객체와 분리되어 있다.
일반적으로 뷰 객체를 재사용하고 재구성하기 때문에 뷰 객체는 앱간의 일관성을 제공한다.

UIKit 및 AppKit 프레임워크는 모두 뷰 클래스 컬렉션을 제공하며, 인터페이스 빌더는 라이브러리에서 수십 개의 보기 객체를 제공한다.

뷰 객체에서 뷰를 그리는 것을 작성하고 모델 객체에 있는 데이터를 표시하고 사용자의 작업에 응답하는 역할이라고 생각한다.

통신

뷰 객체는 앱의 컨트롤러 객체를 통해 모델 데이터의 변경 사항을 학습하고 사용자가 시작한 변경사항(ex. textField에 입력한 text)을 컨트롤러 객체를 통해 앱의 모델 객체에 전달한다.

앞서 모델처럼 뷰도 컨트롤러 객체를 통해 변경사항을 모델 객체에 전달한다


뷰 한 줄 요약

뷰는 모델 객체에 있는 데이터를 표시하고 사용자의 작업에 응답하여 컨트롤러 객체를 통해 모델 객체에 변경사항을 전달한다.



컨트롤러 객체(Controller Objects)

컨트롤러 객체는 앱의 하나 이상의 뷰 객체와 하나 이상의 모델 객체 사이의 중개자 역할을 한다.
컨트롤러 객체는 뷰 객체가 모델 객체의 변경 사항을 학습하거나, 반대로 학습하는 통로이다.

모델 객체 -> 뷰 객체
또는
뷰 객체 -> 모델 객체

컨트롤러 객체는 앱에 대한 설정 및 조정 작업을 수행하고 다른 객체의 수명주기를 관리할 수 있다.

통신

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



컨트롤러 한 줄 요약

뷰 객체와 모델 객체의 중개자 역할로 앱에 대한 설정 및 조정 작업과 다른 객체의 수명주기를 관리할 수 있다.




오늘은 Apple Developer library에 있는 MVC글을 보고 작성하며 나의 생각도 작성해보았다.
다른 디자인 패턴과 차이를 알아보기 위해 시작하였다.

작성하면서 모호한 표현, 비슷한 용어를 찾았는데 다른 디자인 패턴을 찾아보며 더욱 정리 해보아야겠다.

의문점이 생긴 단어, 용어 정리 해야할 것들

객체란, MVC를 사용한 경험을 찾아보자
객체와 class의 차이
계층(layer란?)
객체와 개체의 차이
객체는 object 
개체는 entity
싱글톤
MVC가 왜 쓰였나
profile
iOS 코린이

0개의 댓글