iOS - MVC

longlivedrgn·2022년 12월 28일
0

iOS

목록 보기
2/10
post-thumbnail

SW architecture 와 SW design pattern의 개념 차이 , 왜 필요할까?

SW architecture란?

  • 수많은 기능 하나하나의 부품들을 어떻게 연결시켜 관계를 맺었는지를 결정하는 것
  • 이러한 모듈들을 어떻게 분할하고 배치할 것인가? 및 구성관계 설정
    • 작은 기능 → 모듈
    • 모듈을 기능별로 묶어놓은 집합 → 컴포넌트
    • 전체 → 라이브러리

SW architecture의 기본원리

  1. 모듈화 ⇒ 소프트웨어 성능 향상 및 유지관리 등이 용이하도록 시스템의 기능을 모듈단위로 나누는 것
  2. 추상화 ⇒ 전체적이고 포괄적인 개념을 설계한 후에 구체화시켜 나가는 것
  3. 단계적 분해 ⇒ 상위 개념부터 하위 개념으로 구체화 시키는 분할 기법 하향식 설계 전략
  4. 정보은닉 ⇒ 모듈 내부에 정보와 자료들을 숨겨서 다른 모듈이 접근하거나 수정 못하도록 하는 기법

SW Design Pattern

  • 특정 문제(자주 접는 문제)에대해 쉽게 해결하기 위한 설계 패턴(Architecture보다 작은 개념)
  • 아키텍처의 더 작은 의미로써 특정 유형의 문제를 해결하는 노하우 및 방법

왜 사용할까?

"두 개가 중요한 이유는 기능을 추가하기도 수월하고 빨라진다!"

  • OOP의 다양한 문제상황에 대한 예방
  • 프로그래머 사이의 협업효율 향상(공통된 디자인 패턴을 사용함으로써)
  • 프로그래머 사이의 의사소통 증진
  • 코드의 안정화 및 최적화
  • 코드의 재사용성 증가

조심해야될 점!

  • 디자인 패턴을 위한 코드가 나오면 안된다!

MVC란?

  • 디자인 패턴의 하나

Model

  • What your application is / 무엇을 할 것인가? ( 보이는 것이 아니라)
  • 데이터와 관련된 내용(데이터로 사용될 구조체) / 데이터 관리 로직

Controller

  • How에 해당하는 내용이다. 어떻게 화면에 표시할 것인가?
  • View와 Model을 이어주는 징검다리 역할을 한다.

View

  • 일반적인 요소들(UI)
  • Controller의 하인들

‼️

. Controller는 model과 view에게 직접 접근 가능(그 반대는 불가능)
. model과 view 사이에는 교류가 없다.
. view와 model 사이의 의존성이 없어지기에 각각의 재사용성이 높아진다.

‼️

View, Model이 Controller와 교류하기 위해서 하는 행동들

View → Controller

  • Controller에 target을 만든다.
  • delegate
  • datasource

Model → Controller ( 데이터가 변경되었음을 알려줌)

  • Notification
  • KVO(Key Value Observing)

MVC는 무엇을 구분짓는 용도이며 왜 그것을 구분 지을 필요가 있을까요?

  • Model/View/Controller로 구분하는 것!

구분 짓는 이유

  • 역할이 분리가되어서 유지보수가 쉽다.
  • 확장성도 더 높다

애플에서 이야기하는 MVC의 사례도 찾아주세요.

  • UIkit
    • View와 Model에게 독립성을 주었다.
    • View와 Controller를 분리하기 어렵고(Massive View Controller), Controller의 재사용도 어렵고, 테스트도 불가하다
    • 개발 진행 속도에 있어서는 가장 빠르다.

UIkit - MVC

  • UI 컴포넌트 (UIView)는 어떻게 화면에 그릴지만 담당한다.
  • 셀이 눌리면 어떤 작업을 해야할지, 셀 안에 어떤 텍스트를 넣어야 할지 같은 것들은 DelegateDataSource 프로토콜을 사용해서 컨트롤러(UIViewController)에게 모두 위임한다.
  • UIKit 프레임워크에서 UIView - UIViewController는 기본적으로 한 쌍을 이루게 되며,UIView에 필요한 로직은 대부분 UIViewController에 배치한다.

따라서, 컨트롤러'의 재사용성은? 당연하게도 '컨트롤러'의 재사용성은 낮아진다. 그러나, UITableViewUICollectionView 같은 UI 컴포넌트들은 수백만 개의 iOS 앱에서 재사용된다

0개의 댓글