ios 34일차

bin·2026년 2월 13일

과제를 진행하며 MVVM에 대해 공부한 내용을 정리해보고자 한다.

MVVM

ViewController와 ViewModel의 관계

  • VC는 데이터를 모른다. 데이터 관련 로직은 모두 VM에서 처리된다. VC는 이를 가져다가 사용하면된다.(View에 뿌려주기)
  • 쉽게 말해, 데이터를 받아오고(API 호출), 저장하는 로직은 VM에서 처리해야 한다.
  • VC는 데이터가 필요한 경우 VM 내부 프로퍼티나 메서드를 호출하여 값을 받은 후 바로 View에 뿌린다.
  • 즉, 변수와 상수로 저장할 필요가 없다.
    결론 : VC는 이벤트의 발생과 UI 업데이트 등 View를 관리하며 VM은 해당상황에 필요한 데이터를 VC에 전달하는 역할이다.

데이터 바인딩

  • 그래서 이벤트 발생 시 VM에게서 데이터를 받아오긴 했는데 그걸 어떻게 적용할 것인가?
  • 즉, VM의 메서드로 인해 데이터가 변경되면 VC가 해당 변경사항을 즉각적으로 View에 적용해야 한다.
  • 이를 위해 Closure를 사용한다.

과제에 적용

1. ExchangeRateViewController 분리

ViewController 내부에서

  • allData, ViewData 등 변수 관리 -> ViewModel로 분리
  • fetchData, getCurrencyData 등 API 호출 -> ViewModel로 분리
  • textDidChange 내부 로직에서 입력값에 따라 표시하는 데이터 변경 -> ViewModel 분리
  • 데이터 바인딩(updateData)로 ViewModel 상태 변화 ViewController에게 알리기

2. CalculatorViewController 분리

ViewController 내부에서

  • code, rate 등 변수 관리 -> ViewModel로 분리
    - code와 rate를 하나로 묶어서 두자?
    -> let item: ExchangeRate로 변경
    -> ExchangeRateViewController 내부 CalculatorVM 생성 시 인자 item으로 전달
    -> CalculatorViewController 내부 config에서 인자 item으로 변경
  • 입력값에 따라 버튼을 눌렀을 때 출력되는 결과 값 -> ViewModel로 분리
  • 데이터 바인딩
    - updateDate : 로직 수행 성공 시 resultLabel 업데이트
    • showError : 로직 수행 중 오류, 문제 발생 시 Alert 출력

0개의 댓글