iOS/아키텍처 패턴
UIKit에서 MVVM 알아보기 (MVC -> MVVM) - 2
내일은개발천재🎵
2023. 5. 24. 00:09
MVC
이제까지 해 왔던 방법으로 View Controller를 구성해보자.
(우선 UI는 단순한 TableView에 음악 제목을 띄우기만 할 것이다.)
ViewController
class ViewController: UIViewController {
private var musicData: [Music]?
private let networkManager = NetworkManager.shared
private let tableView: UITableView = {
let table = UITableView()
table.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
return table
}()
override func viewDidLoad() {
super.viewDidLoad()
setTableView()
fetchData()
}
private func setTableView() {
view.addSubview(tableView)
tableView.frame = view.bounds
tableView.dataSource = self
}
private func fetchData() {
networkManager.requestData(term: "jazz") { result in
switch result {
case .success(let data):
self.musicData = data
DispatchQueue.main.async {
self.tableView.reloadData()
}
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
musicData?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = musicData?[indexPath.row].musicTitle
return cell
}
}
View Controller의 역할을 보자.
뷰를 생성하고, NetworkManager의 인스턴스를 이용해서 직접 request 하고, 받아온 정보를 tableView에 업데이트 시켜주고 있다.
1. 뷰를 생성한다. (LifeCycle에 따라 관리)
2. NetworkManager에게 데이터를 요청한다.
(검색 기능이 있다면, 사용자의 입력 값을 감지하여 데이터를 요청하는 코드가 있을 것이다.)
3. Network 결과를 기반으로 TableView를 업데이트 시킨다.