Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

Dev.heestory

[iOS/Swift] MVC 패턴을 공부하며 간단한 어플리케이션 만들기 본문

iOS

[iOS/Swift] MVC 패턴을 공부하며 간단한 어플리케이션 만들기

cloudhee 2023. 7. 13. 01:58

swift로 iOS 어플리케이션을 만들면서 MVC, MVVM 등의 패턴을 사용했는데 뷰, 모델, 컨드롤러, 뷰 모델들이 정확히 어떤 일을 하는지, 디자인 패턴들의 차이점, 장단점 등을 명확히 알지 못해서 정리하고자 블로그를 쓰기로 했다.

먼저 이번 포스팅에서는 MVC 패턴에 대해 정리해보려고 한다.

 

Table Of Contents

- 디자인 패턴이란?

- MVC 패턴

- MVC 패턴 예시(계산기 어플리케이션)

- MVC 패턴 장점

- MVC 패턴 단점

 

디자인 패턴이란?

디자인 패턴이란 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다.

즉, 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷하다.

 

 

MVC 패턴

MVC는 Model, View, Controller의 약자이며 어플리케이션을 세 가지 역할로 구분한 개발 방법론이다.

세 가지 부분은 다음과 같은 역할을 한다.

 

1. Model(모델) : 어플리케이션에서 사용되는 데이터와 비즈니스 로직을 관리한다.

2. View(뷰) : 사용자에서 보여지는 UI부분

3. Controller(컨트롤러) : 사용자의 입력(Action)을 받고 처리한다. 

 

사진과 함께 MVC가 동작하는 과정을 간단히 살펴보자

 

만약 뷰에서 사용자가 어떤 데이터를 저장하는 동작을 취한다면,

1. View는 사용자의 입력(저장 하기 버튼 클릭)을 Controller로 전달한다.

2. Controller는 입력을 받아 데이터를 저장해달라고 Model로 전달한다.

3. Model은 데이터를 저장한 뒤 Controller에게 저장함을 알린다.

4. Controller는 View를 업데이트하여 사용자는 데이터가 저장되었음을 알 수 있다.

 

 

MVC 패턴 예시

MVC패턴을 사용해 만든 계산기를 통해 더 자세히 살펴보자

 

- View

뷰는 사용자에게 보여지는 UI 부분으로, 우리가 실제 사용하는 계산기의 화면이다.

버튼과, 레이블 등 UI 요소들로 뷰를 구성하였다.

 

- Controller

오른쪽 화면이 Controller이다. ViewController로 View의 요소들과 action 함수로 연결되어 사용자의 입력을 받고,

해당하는 입력이 들어왔을 때 해야할 동작을 설정해주었다.

만약 사용자가 0부터 9까지의 버튼을 누르면 레이블에 표시되도록 touchDigit라는 액션 함수를 만들었다.

숫자, 계산결과 등을 보여주는 Label 또한 연결해주었다.

36번째 라인에 보이는 CalculatorBrain이 계산기의 모델이다.

brain이라는 변수에 모델 클래스를 할당해주어 뷰에서 모델의 프로퍼티들을 사용할 수 있다.

 

- Model

Model에서는 계산기에서 사용되는 데이터와 비즈니스 로직을 관리한다.

코드를 보면 계산기의 비즈니스 로직에 해당되는 연산 부분을 구현한 함수들과, 연산을 위해 필요한 데이터들로 구성되어 있다.

 

 

MVC 패턴 장점

가장 단순하여 널리 사용되고 있다. 따라서 많은 개발자들에게 친숙한 패턴이고 비즈니스 로직과 UI로직을 분리하여 유지보수가 쉽다.

(유지보수를 독립적으로 수행할 수 있다.)

애플에서 기본적으로 지원하고 있는 패턴이기 때문에 쉽게 접근할 수 있다.

 

 

MVC 패턴 단점

뷰와 컨트롤러가 너무 밀접하게 연결되어 있어 재사용성이 떨어지고 유닛 테스트를 진행하기 어렵다.

또한 다수의 뷰와 모델이 컨트롤러를 통해 연결되기 때문에 복잡한 대규모 프로그램의 경우 컨트롤러가 불필요하게 커지는 현상이 나타날 수 있다.

이런 문제점을 보완하기 위해 다양한 패턴이 파생되었는데, 그 중 하나인 MVVM패턴에 대해도 알아보고 싶다.

 

 

 

 

 

 

글 읽어주셔서 감사합니다 :)

제가 잘못 알고 있는 내용이 있거나 말씀해주실 부분이 있다면 댓글 한 번 적어주시면 정말 감사하겠습니다.