📌 MVVM 적용하기
🤔💬 리팩토링 지옥에서 벗어나고 싶다
- 이전의 프로젝트에서 일단 돌아가게 만들고 나중에 리팩토링을 진행하는 것에 어려움을 많이 느껴서, 구현에 급급하기 보다는 정확히 어떤식으로 나누고 분리할 것인지 먼저 결정하고 프로젝트를 시작하고자 마음먹었다.
🔎 View: 레이아웃 UIView
- 최대한 아는 것이 없도록 만든다.
- 그리는 역할만 맡도록 한다.
🔎 ViewController: View와 ViewModel을 연결, 사용자 이벤트 전달
- 화면 전환 수행 (생명주기 관리)
- 사용자 입력을 받아서
VM에 전달
VM의 상태변화를 받아서 View를 다시 그림
🔎 ViewModel: 화면에 필요한 데이터 가공/상태, 로직은 다 여기에
- 화면 상태(
state) 관리
- 모델에서 가져와서
UI에서 사용할 수 있도록 데이터 변환함
- 비동기 작업 호출
🔎 Model/Service
URLSession 네트워크/디코딩, 값 그 자체라 struct 형태가 적절한 경우
- 받아오는 제이슨 데이터 구조(
DTO)
- 비즈니스 규칙 (환율 계산 등)
📌 작동 방식
🤔💬 이 데이터는 대체 누굴 줘야 하는데?
- 위에서 처럼 역할만 나누고 시작하다 보니 생각보다 막히는 부분이 많았는데, 데이터의 흐름에 대한 이해가 부족하다보니 그런 듯 했다. 그래서 코드를 치다 말고 다시 예상되는 데이터의 흐름이나 사용자 액션 흐름을 정리했다.
(1) 데이터 흐름 (서버 → 화면)
VC가 ViewModel에게 로드 요청
ViewModel이 URLSession으로 데이터 요청
Model 생성
ViewModel이 화면용 데이터로 가공
VC가 그걸 받아서 TableView reload / 상태 뷰 업데이트
(2) 사용자 액션 흐름 (화면 → 로직)
- 사용자가 탭함(
action 발생)
VC가 이벤트를 ViewModel에 전달
ViewModel이 선택된 항목 처리(예: 선택 상태 저장, 다음 화면에 필요한 값 준비)
VC가 화면 전환 수행