관리 메뉴

사과하는 제라스

[Swift 아키텍쳐 패턴] MVC 패턴을 알아보자! 본문

제라스의 iOS 공부/Swift 아키텍쳐 패턴

[Swift 아키텍쳐 패턴] MVC 패턴을 알아보자!

Xerath(제라스) 2023. 9. 27. 15:41

목차

    728x90
    반응형

    개발을 하다보면 디자인 패턴 얘기를 많이 듣는다. 그 중 가장 기본적이고 흔히 처음 배우게 되는 것이 MVC 패턴이다.

    이건 학교 전공시간 뿐만 아니라 평소 개발을 하면서도 워낙 많이 들어본 패턴이기에 익숙하다.

    하지만, 나는 디자인 패턴을 직접 적용해본 적이 있을까..?🥲

    지금이라도 제대로 해보도록 하자!

     

    MVC 패턴이 무엇인가?

    MVC 패턴은 Model - View - Controller 구조의 아키텍쳐 패턴이다.

     

    여기서 세 부분으로 나뉘는데

     

    Model은 앱의 데이터, 비즈니스 로직을 갖고 있다.

    예를 들면 구조체가 될 수도 있고, 그것이 가진 데이터들에 대한 로직이 될 수도 있다.

    Swift에서는 다양한 방식으로 짤 수도 있는데 class, struct, enum 등등 다양하게 가져갈 수 있다.

     

    View는 유저에게 보여지는 부분으로 가지고 있는 데이터를 시각적으로 표현하는 등의 UI를 담당한다.

    Swift에서는 보통 UIView를 객체로 갖게 되는데 이곳에서는 입력으로 들어온 Model의 정보를 바탕으로 그리게 되고 이것을 View Controller에서 그려주게 된다.

     

    View Controller는 유저에게 보여줄 대상의 정보를 가진 Model과 그것을 표현해서 UI로 보여줄 수 있는 View 사이에 위치한다.

    Swift에서는 UIViewController를 통해 구현을 하고 이곳에서는 Model을 직접 들고있기도 하지만 이곳에 구현된 함수를 통해 Model의 변화를 이끌고 그 변화에 대한 Observer를 VC에 두어 변경사항을 Notification으로 받을 수 있다.

     

    이때, Notification Center를 통해 전달 받는 방식을 Observer Pattern이라고 한다. 이것을 통해 Model과의 소통(변화 감지)을 할 수 있다.

     

     

    아니...그래 좋아! 이렇게 3가지 나누는 거까진 괜찮아. 그럼 전체적인 틀이 어떻게 되는데??

     

    참고출처: https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

     

    Model-View-Controller

    Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Model-View-Controller The Model-View-Controller (MVC) design pattern assigns objects in an ap

    developer.apple.com

    먼저, VC가 View를 들고있는다.

    그때, 그 뷰에 변화를 주고자 하면 View가 연결된 Model을 찾고 해당 Model이 갖고 있는 함수를 실행하도록 한다.

    이 함수는 변화도 시키지만 VC에 변화된 Model 값을 전달하게 된다.

    그러면 이것을 VC는 View에 적용시키게 되고, 그 결과 변화된 모습을 우리가 볼 수 있게 되는 것이다.

     

    하지만, MVC를 통해 구현할 때는 너무 많은 역할을 VC가 해야하게 되고, 그 결과 VC가 비대해지는 모습을 목격할 수 있다. 이것을 막기 위해 MVVM과 같은 패턴을 쓰기도 한다는데 좀 더 다양한 디자인 패턴을 익힌다면 주어진 상황에 따라 알맞은 패턴을 적용할 수 있을 것이다.

    728x90
    반응형