MVC 패턴

suojae·2023년 11월 19일
0

[iOS] 아키텍쳐

목록 보기
2/11


1970년대 UI개발 - 폼(Form)과 위젯(Widget)

  • 폼은 UIViewController와 유사하게 레이아웃, UI전체 이벤트 핸들링 담당
  • 위젯은 버튼, 테이블뷰같은 개별적인 UI Component
  • 당시에는 각각의 Widget안에 모든 코드를 작성해놓는 방식이었음
  • 폼은 위젯안의 코드를 신경쓰지 않고 조립만 하면 되었기 때문에 좋은 코드라 여겨졌던 시대였다



트뤼그베 레인스케우 교수의 반발

  • 오슬로 대학의 트뤼그베 레인스케우 교수는 코드가 위젯의 프레젠테이션과 얽혀있어서 좋은 분리가 아니라고 주장했다.
  • 위젯 내부에 에디터(Editor)를 만들어 프레젠테이션을 담당하는 계층을 만들었다.
  • 에디터 계층은 다시 입력을 담당하는 컨트롤러(Controller)와 출력을 담당하는 뷰(View)로 분리했다.
  • 위젯 밖에는 유저의 멘탈모델인 모델(Model)이라는 계층을 추가해 에디터가 모델에 의존하도록 만들었다
  • 정리하자면 유저의 멘탈모델과 프레젠테이션을 분리하여 유저의 멘탈모델과 컴퓨터 모델을 일치시키는 것이 MVC패턴의 본질이다.



유저의 멘탈모델(User's mental model)이란?

  • 멘탈모델이란 유저가 사용하려는 애플리캐이션이 문제를 해결하기위해 미리 예상한 내부 로직이라고 할 수 있다.
  • 유저의 생각과 컴퓨터 모델이 대응되도록 만들자는 것이 MVC의 본질이다
  • MVC의 본질을 이해하는 것이 중요한 이유는 View가 입력을 받기도, Controller가 입력을 받기도하는, 개발환경에 따라 역할이 자주 바뀐다
  • 하지만 본질은 유저가 "이렇게 되어있을 것이다"라고 예상한 멘탈모델과 컴퓨터에서 구현한 모델이 대응해야한다는 것은 흔들리면 안된다



초기 MVC의 특징

  • 프레젠테이션과 도메인을 분리한다.
  • 컨트롤러: 유저의 입력을받아 모델에 커맨드를 보낸다
  • 모델: 커맨드로 받은 작업을 수행하고 자신을 변경한다.
  • : 모델의 변경을 옵저버 패턴으로 감시하고 모델의 변경이 감지되면 자신을 변경한다.
  • 즉 초기 MVC의 특징은 옵저버 패턴으로 뷰가 모델의 변경을 감시한다
    (옵저버 패턴이 무엇인지 궁금하다면 이글로)



Dependents

  • 구체적으로 어떤 옵저버 패턴을 사용하고 있었느냐! 바로 가장 큰 특징은 Dependents 란 컴포넌트를 중심에두어 사용하고 있었다는 것이다.
  • Dependents는 모델별로 여러 컬렉션을 관리하는 컴포넌트이다.
  • 컨트롤러의 입력을 받아 모델에서 변화가 일어난다면 각 뷰들은 addDependent() 메서드를 사용해서 자신이 필요로 하는 변화를 구독한다. (감시할 필요 없다면 removeDependent()를 통해 감시 취소도 가능)
  • model이 자신을 변경하면 changed() 메서드를 통해 Dependents 에게 알리고 Dependents는 update() 메서드를 통해 자신을 구독하고 있는 뷰에게 알린다.
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글