[swift] Swift MVVM 아키텍처에서의 에러 처리 방법

MVVM은 Model-View-ViewModel의 약자로 앱의 구조를 설계할 때 사용되는 패턴입니다. MVVM 아키텍처는 사용자 인터페이스 로직과 비즈니스 로직을 분리하여 앱을 유지 및 개선하기 쉽게 만들어줍니다. 그러나 MVVM 아키텍처에서의 에러 처리는 몇 가지 고려해야 할 사항이 있습니다.

1. ViewModel에서 에러 처리

ViewModel은 View와 Model 사이의 중재자로서, 비즈니스 로직을 처리하고 View에 데이터를 제공합니다. 따라서 ViewModel에서 발생하는 에러를 적절하게 처리해야 합니다. 일반적으로 다음과 같은 방법으로 에러를 처리할 수 있습니다.

a) 에러 상태 변수 사용

ViewModel에 에러 상태 변수를 추가하여 에러의 발생 여부를 추적할 수 있습니다. 이 변수를 이용하여 View에 에러 메시지를 표시하거나, 에러가 발생했을 때 특정 동작을 수행할 수 있습니다.

class ViewModel {
    var errorMessage: String?
    
    func performAction() {
        // 동작 수행
        if error {
            errorMessage = "에러 메시지"
        }
    }
}

b) 에러 콜백 클로저 사용

동작 수행 중에 에러가 발생하면 콜백 클로저를 호출하여 에러를 처리할 수도 있습니다. 이 방법은 비동기 동작에서 강력하게 작동합니다.

class ViewModel {
    typealias CompletionHandler = (String?) -> Void
    
    func performAction(completion: CompletionHandler) {
        // 동작 수행
        if error {
            completion("에러 메시지")
        } else {
            completion(nil)
        }
    }
}

2. View에서 에러 처리

View는 화면에 표시되는 역할을 담당하며, ViewModel로부터 데이터를 받아 화면에 표시합니다. View에서 발생하는 에러를 처리하기 위해서는 다음과 같은 방법을 고려할 수 있습니다.

a) 에러 메시지 표시

ViewModel이 에러 상태 변수를 제공하면, View에서는 해당 변수를 이용하여 에러 메시지를 화면에 표시할 수 있습니다.

class ViewController: UIViewController {
    @IBOutlet weak var errorMessageLabel: UILabel!
    
    var viewModel: ViewModel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // ViewModel 초기화
        viewModel = ViewModel()
        
        // 에러 상태 변수 감시
        viewModel.observe(\.errorMessage) { [weak self] (viewModel, _) in
            self?.errorMessageLabel.text = viewModel.errorMessage
        }
    }
}

b) 알림 처리

에러가 발생했을 때 사용자에게 알림을 표시해야 하는 경우가 있습니다. 알림은 UIAlertController, UIAlertView 등을 사용하여 간단하게 구현할 수 있습니다.

class ViewController: UIViewController {
    var viewModel: ViewModel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // ViewModel 초기화
        viewModel = ViewModel()
    }
    
    func showAlertWithErrorMessage(_ message: String) {
        let alertController = UIAlertController(title: "에러", message: message, preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)
    }
}

결론

MVVM 아키텍처에서의 에러 처리는 ViewModel과 View 간의 상호 작용을 통해 이루어집니다. ViewModel은 에러 상태 변수 또는 콜백 클로저를 통해 에러를 처리하고, View는 에러 메시지를 표시하거나 알림을 통해 사용자에게 알리는 역할을 수행합니다. 적절한 에러 처리를 통해 앱의 안정성을 높일 수 있습니다.

작성자: 자신의 이름