MVVM 아키텍처 설명 1 (MVC부터 다시 설명) (업데이트-3강) 강의 질문있습니다.
281
작성한 질문수 13
MVVM패턴에 대해 공부하는 중 MVC 패턴에 헷갈리는 부분이 생겨서 질문드립니다.
MVC패턴은 코드 수가 많아지면 컨트롤러가 비대해질 수 있어 유지보수가 힘들고 재사용이 힘들어 진다고 알고 있습니다.
여기서 제가 궁금한 건 그렇다면 뷰와 컨트롤러의 코드를 따로 분류하여 MVC 패턴을 적용하려 할 때
1. 뷰에서 이벤트 처리 함수를 작성해야하는 지
2. 아니면 컨트롤러에서 이벤트 처리 함수를 작성해야하는 지
어떤 방식을 통해 이벤트를 컨트롤해야 되나요?
(물론 뷰에서 다룰 수 없는 부분은 컨트롤러에서 처리해야 하는 건 이해했습니다. 예를 들어 Segue의 Perform, Prepare같은 함수 작성 시)
머릿속에서 자꾸 "사용자의 Action은 컨트롤러가 수행해야한다" 이 내용이 맴돌아서 뷰의 프로퍼티에 연결된 함수도 빼줘야하나? 하고 너무 헷갈립니다.
답변 1
0
네 훈 님.
MVC에서 뷰와 컨트롤러를 분리하셨다면, 가급적이면 뷰는 뷰와 관련된 처리만 하도록 구현하고, 이벤트는 뷰 컨트롤러에서 다루도록 처리해야겠죠. (뷰컨트롤러가 중재자의 역할을 하는 것이니까요.)
(뷰의 프로퍼티에 연결된 함수를 뺀다는게..) 구체적으로 어떤 고민을 하고 계신지 잘 모르겠으나, (예시를 들어주시면 더 좋았긴 하겠지만) 일반적으로는 뷰에서 일어난 액션을 뷰컨트롤러로 전달하면 되겠죠. (직접연결, 델리게이트, 노티피케이션, 클로저 등... 전달할 수 있는 방법도 많이 있고요.)
간단한 예시로 보자면.. 뷰에 올려져 있는 버튼의 addTarget을 (뷰컨트롤러 코드에서) 직접 연결할 수도 있겠죠.
뷰.button.addTarget(self, action: #selector(동작할함수), for: .touchUpInside)
기본적으로는 위에 말씀드린 대로 뷰컨트롤러에서 처리하면 된다고 생각이 드나,
솔직히.. 학습하시는 입장에서 두 방법으로 다 구현해보시는 것이 좋다고 생각이 들긴 합니다. 직접 구현된 내용을 눈으로 보시고 장/단점을 비교해서 알고 있다면.. (다음에 어떠한 상황, 코드에서든) 본인의 관점을 제시할 수 있으시지 않을까 합니다. (아키텍처/디자인 패턴 이란 건 무조건적인 정답이 있는게 아니라, 조금 더 구조화 시킬 수 있는 일반적인 해결책에 가까운 것이니까요.)
감사합니다. :)
1
아 제가 설명이 조금 빈약했나 봅니다.
제가 고민했던 부분은 "뷰의 프로퍼티에 대한 액션처리를 어디서 해주냐?" 였는데 다행히도 앨런님께서 들어주신 예시가 제가 고민했던 부분입니다!
그러면 위 코드처럼 "일반적으로 뷰에 프로퍼티(ex 버튼)를 작성하고 이벤트 같은 액션 처리들은 컨트롤러로 빼서 처리한다"는 것으로 이해해도 좋을까요?
0
네네 일반적으로는 이벤트는 뷰컨트롤러에서 처리하기에,
뷰의 속성에 있는 버튼에 접근 하셔서, 직접 연결하시면 됩니다.
self.view.button.addTarget(뷰컨트롤러(self), ...., .....)
이런 방법이 아무래도, 뷰는 그림을 그리는 역할 / 컨트롤러는 이벤트를 처리하는 등의 역할에 가깝겠죠!
수강연장부탁드려도될까요..
0
43
2
Drawing Cycle 관련 질문
0
72
1
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
0
97
2
델리게이트 패턴 관련 질문
0
68
2
수강 기간 연장 부탁드릴 수 있을까요?
0
65
1
활용 앱 57강 질문입니다.
0
55
1
활용 앱 30강 에러 질문입니다
0
64
2
기초앱 17강 Contraints 설정 질문입니다.
0
67
2
기초 앱 4강 Type Any -> UIButton
0
67
2
34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다
0
80
1
깃에 코드는 올려도 된다고 하셨는데
0
110
1
수강기간 연장신청 드려도 될까요?
0
84
1
수강 기간 연장 부탁드려도 될까요?
0
120
2
수강 기간 연장 신청 요청드립니다.
0
131
2
playground에서 상단 실행?아이콘 회전 관련하여...
0
136
1
활용앱53강에서 질문있습니다.
0
165
2
Project 명칭 변경방법이 궁금합니다.
0
140
1
override 에 대해서 궁금한 것이 있습니다.
0
125
2
섹션8] 코드 리팩토링 문의
0
100
1
xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문
0
568
2
수강 기간 연장 부탁드려도 될까요?
0
131
2
뷰모델의 상태변화 와 didSet
0
98
1
@Sendable 키워드
0
95
1
클로저
0
107
2





