MVC 패턴

Judy·2022년 4월 25일
0

iOS

목록 보기
3/28

MVC

Apple : MVC 디자인 패턴

MVC 패턴은 애플리케이션의 구성요소를 역할에 따라 Model-View-Controller 3가지 형태로 나눈다.

MVC는 CoCoa 애플리케이션을 위한 좋은 디자인으로 여러 장점을 가지고 있다.

장점

  1. 재사용성이 좋다.
  2. 인터페이스가 잘 정의된다.
  3. 변화하는 요구사항에 잘 적응하고 확장 가능성이 좋다.

많은 cocoa 아키텍처와 기술은 MVC 기반으로 되어 있고, 사용자 정의 타입은 MVC 역할 중 하나를 수행하게 해야한다.

구성요소

MVC 패턴은 뷰 객체는 모델 객체와 분리되어 있다는게 특징인데 각 객체를 살펴보면 다음과 같다.

1. Model

모델은 데이터를 보유하고 해당 데이터를 조작하는 논리를 정의

  • 데이터를 캡슐화하고, 데이터를 조작하고 처리하는 로직을 연산한다.
  • 다른 객체들과 일대다(1:many) 관계를 가질 수 있다.
  • 응용 프로그램의 지속 상태에 대한 데이터는 모델 객체에 존재해야 한다. (파일이나 데이터베이스에 저장돼있는지 상관없이)
  • 뷰 객체와 명시적인 연결이 없어야 한다.

Communication

  • 뷰 객체에서의 사용자 작업을 컨트롤러 객체를 통해 전달받아 모델 객체의 생성 또는 수정을 발생시킨다.
  • 모델 객체 변경 -(컨트롤러에게 알리기)-> 컨트롤러 -(뷰 객체에 전달)-> 뷰 객체 업데이트

2. View

정보를 사용자에게 표시하는 화면

  • 사용자가 볼 수 있는 응용프로그램의 객체
  • 뷰는 재사용과 구성 가능한 경향이 있음
  • 뷰 객체의 주요 목적은 데이터를 표시하고 해당 데이터를 편집할 수 있게 하는 것이다.

Communication

  • 컨트롤러 객체를 통해 모델 객체의 데이터 변화를 알 수 있다.
  • 컨트롤러 객체를 통해 사용자가 변경한 데이터를 모델 객체에 전달한다.
    ex) 텍스트 필드에 텍스트 넣기

3. Controller

컨트롤러 객체는 뷰와 모델의 중개인 역할을 한다

  • 컨트롤러는 뷰와 모델의 통로로 뷰에서 일어난 변화를 모델이 알게하고, 반대로도 역시 모델에서의 변화를 뷰가 알게한다.
  • 응용 프로그램에 대한 설정과 조정을 수행하고, 다른 객체의 life cycle을 관리할 수 있다.

Communication

  • 뷰에서 수행된 사용자의 작업을 해석하여 새로운 데이터나 변경된 데이터를 모델 객체에 전달한다.
  • 모델에서 변화가 있을 때 해당 데이터를 뷰 객체로 전달해 표시할 수 있게 한다.


소프트웨어 아키텍처

소프트웨어 골격이 되는 기본구조

  • 소프트웨어의 뼈대나 고수준의 기반을 담당한다.
  • 모든 구성 요소, 구성 요소가 서로 상호 작용하는 방식, 구성 요소가 작동하는 환경, 소프트웨어 설계에 사용되는 원칙이 포함된다.
  • 소프트웨어의 구성요소의 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙

장점

  • 시스템이 구축되기 전에 소프트웨어 시스템의 동작을 분석하기 위한 기반을 제공한다.
  • 요소와 결정을 재사용할 수 있는 기반을 제공한다.
  • 시스템의 개발, 배포 및 유지 관리 수명에 영향을 미치는 초기 설계 결정을 지원한다.
  • 이해 관계자와의 의사 소통을 촉진하여 그들의 요구를 더 잘 충족시키는 시스템에 기여한다.
  • 리스크 관리에 도움이 된다.
  • 비용 절감이 가능하다.

디자인 패턴

프로그램 개발에서 자주 일어나는 문제를 해결하기 위한 방법으로 이후에도 재사용할 수 있는 형태로 가공한 솔루션

  • 모듈정도의 단위로 클래스 범위, 함수 목적등 코드 수준의 디자인이다.
  • Gof(Gang of Four) 사인방이 <Design Patterns>을 출판하며 널리 알려졌다.
    ex) 생성 패턴(싱클턴 패턴), 구조 패턴(프록시 패턴, 브리지 패턴), 행동 패턴(책임 연쇄 패턴, 옵저버 패턴), 아키텍처 패턴(모델-뷰-컨트롤러 패턴) 등




참조

위키피디아 - 디자인 패턴(책)
위키피디아 - Software Architecture

profile
iOS Developer

0개의 댓글