inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

MVVM 아키텍처 설명 1 (MVC부터 다시 설명) (업데이트-3강)

MVVM 아키텍처 설명 1 (MVC부터 다시 설명) (업데이트-3강) 강의 질문있습니다.

281

hoon

작성한 질문수 13

0

MVVM패턴에 대해 공부하는 중 MVC 패턴에 헷갈리는 부분이 생겨서 질문드립니다.
MVC패턴은 코드 수가 많아지면 컨트롤러가 비대해질 수 있어 유지보수가 힘들고 재사용이 힘들어 진다고 알고 있습니다.

여기서 제가 궁금한 건 그렇다면 뷰와 컨트롤러의 코드를 따로 분류하여 MVC 패턴을 적용하려 할 때

1. 뷰에서 이벤트 처리 함수를 작성해야하는 지
2. 아니면 컨트롤러에서 이벤트 처리 함수를 작성해야하는 지

어떤 방식을 통해 이벤트를 컨트롤해야 되나요?
(물론 뷰에서 다룰 수 없는 부분은 컨트롤러에서 처리해야 하는 건 이해했습니다. 예를 들어 Segue의 Perform, Prepare같은 함수 작성 시)
머릿속에서 자꾸 "사용자의 Action은 컨트롤러가 수행해야한다" 이 내용이 맴돌아서 뷰의 프로퍼티에 연결된 함수도 빼줘야하나? 하고 너무 헷갈립니다.

ios swift

답변 1

0

앨런(Allen)

네 훈 님.

 

MVC에서 뷰와 컨트롤러를 분리하셨다면, 가급적이면 뷰는 뷰와 관련된 처리만 하도록 구현하고, 이벤트는 뷰 컨트롤러에서 다루도록 처리해야겠죠. (뷰컨트롤러가 중재자의 역할을 하는 것이니까요.)

 

(뷰의 프로퍼티에 연결된 함수를 뺀다는게..) 구체적으로 어떤 고민을 하고 계신지 잘 모르겠으나, (예시를 들어주시면 더 좋았긴 하겠지만) 일반적으로는 뷰에서 일어난 액션을 뷰컨트롤러로 전달하면 되겠죠. (직접연결, 델리게이트, 노티피케이션, 클로저 등... 전달할 수 있는 방법도 많이 있고요.)

 

간단한 예시로 보자면.. 뷰에 올려져 있는 버튼의 addTarget을 (뷰컨트롤러 코드에서) 직접 연결할 수도 있겠죠.

뷰.button.addTarget(self, action: #selector(동작할함수), for: .touchUpInside)


기본적으로는 위에 말씀드린 대로 뷰컨트롤러에서 처리하면 된다고 생각이 드나,
솔직히.. 학습하시는 입장에서 두 방법으로 다 구현해보시는 것이 좋다고 생각이 들긴 합니다. 직접 구현된 내용을 눈으로 보시고 장/단점을 비교해서 알고 있다면.. (다음에 어떠한 상황, 코드에서든) 본인의 관점을 제시할 수 있으시지 않을까 합니다. (아키텍처/디자인 패턴 이란 건 무조건적인 정답이 있는게 아니라, 조금 더 구조화 시킬 수 있는 일반적인 해결책에 가까운 것이니까요.)


감사합니다. :)

1

hoon

아 제가 설명이 조금 빈약했나 봅니다.
제가 고민했던 부분은 "뷰의 프로퍼티에 대한 액션처리를 어디서 해주냐?" 였는데 다행히도 앨런님께서 들어주신 예시가 제가 고민했던 부분입니다!
그러면 위 코드처럼 "일반적으로 뷰에 프로퍼티(ex 버튼)를 작성하고 이벤트 같은 액션 처리들은 컨트롤러로 빼서 처리한다"는 것으로 이해해도 좋을까요?

0

앨런(Allen)

네네 일반적으로는 이벤트는 뷰컨트롤러에서 처리하기에,
뷰의 속성에 있는 버튼에 접근 하셔서, 직접 연결하시면 됩니다.
self.view.button.addTarget(뷰컨트롤러(self), ...., .....)

이런 방법이 아무래도, 뷰는 그림을 그리는 역할 / 컨트롤러는 이벤트를 처리하는 등의 역할에 가깝겠죠!

1

hoon

고민이 시원하게 해결됬어요! 앨런님 답변 감사합니다.

수강연장부탁드려도될까요..

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