본문 바로가기
TIL

250713 TIL | MVC 패턴으로 구조 바꾸기

by 23g 2025. 7. 13.

 

안녕하세요?

오늘은 BMI 계산기 프로젝트를 MVC 패턴에 맞게 리팩토링했어요
ViewController에 있던 비즈니스 로직을 Model로 분리함!!!

 

MVC 패턴... 이해는 되는데 막상 변경하려면 아직 감이 잘 안잡힘,,,! 연습할게요

오늘 한 일

  • CalculateViewController에서 BMI 계산 로직 제거하고 Model에 위임함
  • CalculateBrain 모델 생성해서 계산 책임 분리

최종 CalculateBrain.swift

import UIKit

class CalculateBrain {
  private var bmi: BMI?

  func calculateBMI(height: Float, weight: Float) {
    let value = weight / pow(height, 2)

    if value < 18.5 {
      bmi = BMI(bmiValue: value, advice: "저체중", backgroundColor: .cyan)
    } else if value < 23 {
      bmi = BMI(bmiValue: value, advice: "정상", backgroundColor: .green)
    } else {
      bmi = BMI(bmiValue: value, advice: "과체중", backgroundColor: .red)
    }
  }

  func getBMI() -> String {
    return String(format: "%.2f", bmi?.bmiValue ?? 0.0)
  }

  func getAdvice() -> String {
    return bmi?.advice ?? "-"
  }

  func getBackgroundColor() -> UIColor {
    return bmi?.backgroundColor ?? .black
  }
}

ViewController에서는 이렇게 사용함

calculateBrain.calculateBMI(height: heightSilder.value, weight: weightSilder.value)
resultVC?.bmiValue = calculateBrain.getBMI()
resultVC?.advice = calculateBrain.getAdvice()
resultVC?.backgroundColor = calculateBrain.getBackgroundColor()

오늘 배운 점

  • Model이 비즈니스 로직을 전담하고 ViewController는 역할을 최소화해야 함
  • 옵셔널은 ?? 연산자를 활용해서 안전하게 처리해야 함
  • Swift에서는 저장 프로퍼티가 옵셔널이면 init() 없이도 클래스 생성 가능함
  • struct는 값 타입이라서 매번 새 인스턴스를 생성해야 원하는 값이 저장됨

다음 할 일

  • 언전게,,,미뤄둔 MVVM 패턴도 공부하기