Open Do-hyun-Kim opened 1 year ago
Model-View-Controller
의 약자View
와 Controller
가 너무 밀접하게 연결되어 있다.Controller가 View의 Life Cycle까지 관리하기 때문에 View와 Controller를 분리하기 어렵다
대부분의 코드가 Controller에 밀집될 수 있다
Life Cycle 관리 뿐만 아니라, delegate나 datasource 관리, 네트워크 요청, DB에 데이터 요청 등 많은 코드가 Controller에 작성되면 Controller의 크기는 비대해지고 내부 구조는 복잡해진다
→ Massive View Controller 라고 부른다
→ 이렇게 복잡한 코드는 프로젝트 규모가 커질수록 유지보수하기 힘들다.
Model, View, Contorller 로 이루어진 아키텍처 패턴으로 애플리케이션의 각 로직을 역할에 맞게 분리하여 유지보수하기 쉽도록 한다.
UIViewController
는 MVC의 Controller 속성을 가진다.UIViewController
에게 각각 데이터 변경과, 유저 이벤트를 알리기 위해 KVO, Notification, Delegate, Datasource 를 사용한다.UIViewController
는 View를 위한 UI 로직 처리 및 Model을 위한 데이터 로직 처리 뿐만 아니라, 뷰의 생명주기 까지 관리하므로 코드가 방대해 질 수 있다.Model
, View
, Controller
의 약자인 MVC 패턴은 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 디자인 패턴관심사 분리
)하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향없이 독립적으로 유지보수를 할 수 있음Model
)entitiy
를 유지하면서 모델을 설계해야 함View
)Controller
에 종속되어 결정 되며, 이때 View
는 도메인 모델의 상태를 변환하거나, 받아서 렌더링하는 역할을 함Controller
)Model
과 View
를 연결시켜주는 다리View
로부터 사용자의 action
을 받아 Model
에게 어떤 작업을 해야하는지 알리거나 Model의 데이터 변화를 View
에게 전달하여 View
를 어떻게 업데이트할지 알려줌Controller
은 Model
, View
에게 직접 지시할 수 있지만, Model
-View
는 독립되어야 하기때문에 서로 소통할 수 없다. -> 하지만 View가 Model의 데이터를 어떻게 가져오느냐에서 전통적인 Observer 패턴을 사용하고 있다.
Model
은 addObserver
라는 함수를 이용하여 View
를 자신에게 등록시킴Model
은 자신에게 등록된 모든 View
를 기억하고 있다가 자신의 상태가 바뀌게 되면 등록된 모든 View
에 notify
함수를 호출하여 View
를 업데이트 시킴Model
은 View
를 여러개 가질 수 있고 MVC에서는 이것을 허용함. +View
도 여러개의Model
에 등록될 수 있음
MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.
MVC Pattern이란 무엇인가?
MVC Pattern
은 Model - View - Controller로 구성된 구조이다.MVC Pattern
을 사용시에 사용자의 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 독립적으로 유지보수 할 수 있다.MVC Pattern
은 세가지 구성 요소(Model, View, Controller)로 구성되어 있으며 세가지 역활을 구분하는 디자인 패턴이다.Model
데이터(DTO)
와 관련된 내용을 담고 있다.Model
에서 처리하고 있다.JSON Codable
,Core Data
,Device Data
,Network Code
,Constants
,Variable
, 등이 Model에 포함된다.Model
객체는 결국 Public 하게 접근 되어야 한다.View
View
는 사용자에게 보여지는 User Interface 부분을 담당 한다.Code
를 포함하고 있다.View
는delegate Pattern
의delegate
,datasource
를 이용하여 Controller에게 작업을 수행하도록 위임한다.Controller
Controller
는 앱의 핵심 로직을 담고 있는 계층이다.Controller
는 View, Model에 연결되어 있어 그 중간의 역할을 하고 있다. MVVM 패턴의ViewModel
역할과 비슷하다.notify
해주거나 Model의 데이터 변화를 View에게 전달하여 View를update
하는지 알려준다.MVC Pattern 장점
MVC Pattern
같은 경우 다른 패턴에 비해 적은 코드량을 요구한다.Pattern
구조 파악이 비교적 쉽다.MVC Pattern 단점
Massive view controller
해진다.참고 사이트