안녕하세요?
오늘은 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 패턴도 공부하기
'TIL' 카테고리의 다른 글
250810 TIL | swift 네이버 지도 현재 위치 버튼 활성화하기 (2) | 2025.08.10 |
---|---|
250807 | 마커 등록 화면 UI 구성 (FlexLayout + NMFMapView + 태그 영역 레이아웃 작업) (0) | 2025.08.07 |
250701 | progressBar가 작동을 안한다 | 해결 방법! (0) | 2025.07.01 |
250622 TIL | 기능 구현 팁, switch / enum, 초기화, 패턴 등 (0) | 2025.06.22 |
250615 TIL | 사이판에서 돌아왔아요 (0) | 2025.06.15 |