suojae0516.log
로그인
suojae0516.log
로그인
MVC 패턴
suojae
·
2023년 11월 19일
팔로우
0
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()
메서드를 통해 자신을 구독하고 있는 뷰에게 알린다.
suojae
Hi 👋🏻 I'm an iOS Developer who loves to read🤓
팔로우
이전 포스트
What is Architecture Pattern?
다음 포스트
Variety of MVC - JSP Model
0개의 댓글
댓글 작성