• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

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

24.03.12 16:12 작성 조회수 114

0

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

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

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

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

답변 1

답변을 작성해보세요.

0

네 훈 님.

 

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

 

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

 

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

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


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


감사합니다. :)

hoon님의 프로필

hoon

질문자

2024.03.12

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

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

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

hoon님의 프로필

hoon

질문자

2024.03.12

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