[내일배움캠프 8주차 (02/23)]

yeseul jang·2026년 2월 23일

내일배움캠프

목록 보기
13/32

📌 MVVM 적용하기

🤔💬 리팩토링 지옥에서 벗어나고 싶다

  • 이전의 프로젝트에서 일단 돌아가게 만들고 나중에 리팩토링을 진행하는 것에 어려움을 많이 느껴서, 구현에 급급하기 보다는 정확히 어떤식으로 나누고 분리할 것인지 먼저 결정하고 프로젝트를 시작하고자 마음먹었다.

🔎 View: 레이아웃 UIView

  • 최대한 아는 것이 없도록 만든다.
  • 그리는 역할만 맡도록 한다.

🔎 ViewController: View와 ViewModel을 연결, 사용자 이벤트 전달

  • 화면 전환 수행 (생명주기 관리)
  • 사용자 입력을 받아서 VM에 전달
  • VM의 상태변화를 받아서 View를 다시 그림

🔎 ViewModel: 화면에 필요한 데이터 가공/상태, 로직은 다 여기에

  • 화면 상태(state) 관리
  • 모델에서 가져와서 UI에서 사용할 수 있도록 데이터 변환함
  • 비동기 작업 호출

🔎 Model/Service

  • URLSession 네트워크/디코딩, 값 그 자체라 struct 형태가 적절한 경우
  • 받아오는 제이슨 데이터 구조(DTO)
  • 비즈니스 규칙 (환율 계산 등)

📌 작동 방식

🤔💬 이 데이터는 대체 누굴 줘야 하는데?

  • 위에서 처럼 역할만 나누고 시작하다 보니 생각보다 막히는 부분이 많았는데, 데이터의 흐름에 대한 이해가 부족하다보니 그런 듯 했다. 그래서 코드를 치다 말고 다시 예상되는 데이터의 흐름이나 사용자 액션 흐름을 정리했다.

(1) 데이터 흐름 (서버 → 화면)

  1. VCViewModel에게 로드 요청
  2. ViewModelURLSession으로 데이터 요청
  3. Model 생성
  4. ViewModel이 화면용 데이터로 가공
  5. VC가 그걸 받아서 TableView reload / 상태 뷰 업데이트

(2) 사용자 액션 흐름 (화면 → 로직)

  1. 사용자가 탭함(action 발생)
  2. VC가 이벤트를 ViewModel에 전달
  3. ViewModel이 선택된 항목 처리(예: 선택 상태 저장, 다음 화면에 필요한 값 준비)
  4. VC가 화면 전환 수행
profile
iOS 개발

0개의 댓글