티스토리 뷰

Dev.iOS/Swift

[iOS Swift] MVC 패턴

zeekke 2019. 12. 14. 00:37

MVC 패턴은 Model, View, Controller 그룹으로 나누는 것입니다.

 

Model은 프로그램이 하는 일 자체를 의미하며 UI와는 상관 없습니다.

View는 사용자와 상호작용하는 interface입니다.

Controller는 Model과 View를 연결하는 역할을 합니다.

또, UI에서 발생하는 일에 따라 Model을 업데이트 하고 반대로 Model에 변동이 생기면 UI도 변하게 합니다.

 

Model과 Views는 서로 접근할 수 없습니다.

반면, Controller는 Model과 View에게 접근할 수 있습니다.

그렇다면 Model에서 Controller로의 접근, Controller에서 View로의 접근은 어떨까요?

 

먼저, Model에서 Controller로의 접근은 가능하지만 MVC 패턴에 어긋납니다.

MVC 패턴에 따르면, Model은 데이터의 값을 바꾸고 관리하는 것만 담당하기 때문입니다.

그렇다면 Model의 값이 바뀌었을 때, 어떻게 Controller에 값을 전달할까요?

iOS에서는 Notification을 사용해 해결합니다.

Notification은 Model이 Controller에게 자신의 값이 바뀌었다는 사실을 알려, Controller가 이를 듣고 Model에 접근하도록 하는 것입니다.

 

다음으로, View에서 Controller로의 접근은 어떨까요?

위와 비슷하게, View는 화면을 갱신하는 것이 본인의 역할이기 때문에 View에서의 변화를 Controller에게 직접 전달하면 안됩니다.

iOS에서는 이를 Delegate(혹은 Datasource)를 사용해 해결합니다.

Delegate는 사용자가 event를 발생시켰을 때, 프로그램에서 해야할 일을 Controller에게 위임합니다.

 

MVC 패턴으로 코드를 짜는 이유는 역할을 분리하여 개발, 유지 보수를 용이하기 위함입니다.

하지만 실제로는 Model, View, Controller의 분리가 완전하진 않습니다.

View의 생명 주기에 관한 코드가 Controller에 모두 위치하고 네트워크 통신에 관한 코드도 Controller에 위치하기 때문에 Controller의 크기가 지나치게 커지는 경향이 있습니다.

이런 문제점을 극복하고자 MVC-N, MVP, MVVM 등의 패턴을 사용하기도 합니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함