작성
·
247
0
MVVM패턴에 대해 공부하는 중 MVC 패턴에 헷갈리는 부분이 생겨서 질문드립니다.
MVC패턴은 코드 수가 많아지면 컨트롤러가 비대해질 수 있어 유지보수가 힘들고 재사용이 힘들어 진다고 알고 있습니다.
여기서 제가 궁금한 건 그렇다면 뷰와 컨트롤러의 코드를 따로 분류하여 MVC 패턴을 적용하려 할 때
1. 뷰에서 이벤트 처리 함수를 작성해야하는 지
2. 아니면 컨트롤러에서 이벤트 처리 함수를 작성해야하는 지
어떤 방식을 통해 이벤트를 컨트롤해야 되나요?
(물론 뷰에서 다룰 수 없는 부분은 컨트롤러에서 처리해야 하는 건 이해했습니다. 예를 들어 Segue의 Perform, Prepare같은 함수 작성 시)
머릿속에서 자꾸 "사용자의 Action은 컨트롤러가 수행해야한다" 이 내용이 맴돌아서 뷰의 프로퍼티에 연결된 함수도 빼줘야하나? 하고 너무 헷갈립니다.
답변 1
0
네 훈 님.
MVC에서 뷰와 컨트롤러를 분리하셨다면, 가급적이면 뷰는 뷰와 관련된 처리만 하도록 구현하고, 이벤트는 뷰 컨트롤러에서 다루도록 처리해야겠죠. (뷰컨트롤러가 중재자의 역할을 하는 것이니까요.)
(뷰의 프로퍼티에 연결된 함수를 뺀다는게..) 구체적으로 어떤 고민을 하고 계신지 잘 모르겠으나, (예시를 들어주시면 더 좋았긴 하겠지만) 일반적으로는 뷰에서 일어난 액션을 뷰컨트롤러로 전달하면 되겠죠. (직접연결, 델리게이트, 노티피케이션, 클로저 등... 전달할 수 있는 방법도 많이 있고요.)
간단한 예시로 보자면.. 뷰에 올려져 있는 버튼의 addTarget을 (뷰컨트롤러 코드에서) 직접 연결할 수도 있겠죠.
뷰.button.addTarget(self, action: #selector(동작할함수), for: .touchUpInside)
기본적으로는 위에 말씀드린 대로 뷰컨트롤러에서 처리하면 된다고 생각이 드나,
솔직히.. 학습하시는 입장에서 두 방법으로 다 구현해보시는 것이 좋다고 생각이 들긴 합니다. 직접 구현된 내용을 눈으로 보시고 장/단점을 비교해서 알고 있다면.. (다음에 어떠한 상황, 코드에서든) 본인의 관점을 제시할 수 있으시지 않을까 합니다. (아키텍처/디자인 패턴 이란 건 무조건적인 정답이 있는게 아니라, 조금 더 구조화 시킬 수 있는 일반적인 해결책에 가까운 것이니까요.)
감사합니다. :)
아 제가 설명이 조금 빈약했나 봅니다.
제가 고민했던 부분은 "뷰의 프로퍼티에 대한 액션처리를 어디서 해주냐?" 였는데 다행히도 앨런님께서 들어주신 예시가 제가 고민했던 부분입니다!
그러면 위 코드처럼 "일반적으로 뷰에 프로퍼티(ex 버튼)를 작성하고 이벤트 같은 액션 처리들은 컨트롤러로 빼서 처리한다"는 것으로 이해해도 좋을까요?