본문 바로가기
Swift Study

MVC

by 창브로 2024. 2. 24.
728x90

오늘은 디자인 패턴 중 하나인 MVC 패턴에 대해 알아보겠습니다.

MVC는 (Model-View-Controller)의 약자입니다.

각각 무슨 역할을 하는지 어떤 관계에 있는지 알아보도록 하죠!

 

Model

Model은 앱의 데이터와 관련된 내용들을 담고 있습니다. 물론 데이터를 관리하는 로직도 포함하고 있습니다.

Model은 UI와 직접적으로 연결되지 않게 하는 것이 기본입니다.

Model은 받아온 데이터를 그에 맞춰 저장할 형태를 만드는 것이 우선이지 UI에서 어떻게 보일지는 일단 신경 쓰지 않는 것이 좋습니다.

예를 들어, School이라는 구조체에 학생 이름을 저장하는 것은 괜찮지만,

이 문자열을 어떤 식으로 파싱 해서 보여줄지는 고민하지 않아도 됩니다.

 

struct Person {
    let name: String?
    let age: Int?
}

 

이런 구조체나, 네트워크 로직 Color나 String의 Extension 등이 Model에 포함됩니다.

 

View

View는 사용자들이 보는 UI라고 생각하시면 됩니다. 유저들에게 어떻게 화면을 구성하고 보여줄지에 대한 코드들이 들어가 있습니다.

(ex. UILabel, UIButton.. )

View를 작성할때는 재사용성이 강조됩니다. 화면에는 중복되는 요소들이 있습니다.

이런 요소들을 어떻게 잘 나누어 재활용할 수 있는지가 중요합니다.

예를 들어, 앱 어디에서든 사용하는 버튼이 있으면 사용할 때마다 해당 버튼 디자인을 코딩하는 것이 아니라 MainButton 이런 식으로 따로 만들어 관리하는 것입니다.

 

Controller

Controller는 Model과 View 사이에 연결되어 중심의 역할을 하고 있습니다.

View에서 보여주기 위한 데이터를 이 Controller가 보내주면서 View를 갱신하고, 그 데이터를 Model으로부터 가져오는 기능을 합니다. 물론 View로부터 유저와의 상호작용에 대한 정보를 받고, 그 정보를 바탕으로 해당된 로직을 실행하고 Model의 정보를 업데이트하는 기능도 있습니다.

쉽게 말해 데이터와 사용자인터페이스 사이의 이벤트를 처리하며 요소를 잇는 다리역할을 합니다.

 

 

MVC 서로서로의 관계는?

https://www.edwith.org/swiftapp/lecture/26620?isDesc=false

 

 

위 그림 그대로 Model과 View는 서로 독립적이며 소통이 불가능합니다.

 

하지만 위에서 말씀 드렸드시 Controller가 중간다리 역할을 하며 View로부터 사용자의 action을 받아 Model에게 어떤 작업을 해야 하는지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할지 알려줍니다!

 

애플 에서는 어떻게 사용되고 있나요?

MVC 패턴은 애플이 UIKit에서 채택하기로한 디자인 패턴이라 가장 일반적인 iOS 패턴입니다.

ViewController를 사용하기 때문에 View와 Controller가 결합되어 있어 사실상 ViewController와 Model로 구분됩니다.

Controller가 View의 생명주기까지 관리하기 때문에 Controller의 역할은 늘어났지만 View와 Model의 연결은 간편해졌습니다.

 

 

 

MVC 패턴의 장점

- 간단하고 직관적인 구조를 가지고 있기 때문에, 빠르게 개발할 수 있습니다.

 

 

MVC 패턴의 단점

- View, Controller, Model가 강하게 연결되어 있어 유연성과 재사용성이 떨어집니다.

- ViewController에 많은 코드가 모이게 되고 복잡한 프로젝트일 경우

유지보수가 어려워지고 코드의 가독성과 확장성이 떨어질 수 있습니다.

 

 

다음 포스팅에서는 MVVM에 대해 알아보겠습니다.

수고하셨습니다🙋🏻‍♂️

 

'Swift Study' 카테고리의 다른 글

Error Handling  (0) 2024.02.23
Optional  (0) 2024.02.21
weak, unowned  (0) 2024.02.20
Strong Reference Cycle  (0) 2024.02.20
ARC  (0) 2024.02.20