728x90
2024년 4월 14일 일요일
과제 코드를 보며 좀더 업데이트 할 예정..
📌 DataManager 역할
- 데이터 처리: 앱의 데이터 관련 로직을 처리한다. (데이터베이스 접근, 네트워크 요청, 데이터 변환 등)
- 데이터 제공: ViewController에 필요한 데이터를 제공 → ViewController는 UI 업데이트를 위한 데이터에 접근
📌 ViewController 역할
- UI 관리: 화면에 보여지는 UI 요소들을 관리한다. (사용자 입력을 받고, 화면에 데이터 표시하기 등)
- DataManager와의 상호작용: 필요한 데이터를 DataManager로부터 요청하고, 받은 데이터로 UI를 업데이트 한다.
📌 DataManager와 ViewController를 연결 방법
1. 직접 참조를 통한 연결: DataManager의 인스턴스를 직접 생성하거나, 외부에서 생성된 인스턴스를 전달받아 사용하는 방법으로 간단하고 직관적이지만, ViewController와 DataManager 간의 결합도가 높아질 수 있다.
class DataManager {
func fetchData() -> [Data] {
// 데이터를 가져오는 로직
}
}
class ViewController: UIViewController {
var dataManager = DataManager()
func reloadData() {
let data = dataManager.fetchData()
// 데이터를 사용하여 UI 업데이트
}
}
2. Delegate 패턴을 통한 연결: DataManager가 데이터를 가져온 후 ViewController에 알리기 위해 delegate 패턴을 사용할 수 있다. 이 방법은 ViewController와 DataManager 간의 결합도를 낮춰 더 유연한 코드 구조를 만든다.
protocol DataManagerDelegate: AnyObject {
func didFetchData(_ data: [Data])
}
class DataManager {
weak var delegate: DataManagerDelegate?
func fetchData() {
// 데이터를 가져오는 로직
let data = [Data]() // 가정
delegate?.didFetchData(data)
}
}
class ViewController: UIViewController, DataManagerDelegate {
var dataManager = DataManager()
override func viewDidLoad() {
super.viewDidLoad()
dataManager.delegate = self
}
func didFetchData(_ data: [Data]) {
// 데이터를 사용하여 UI 업데이트
}
}
3. 클로저(Closure)를 통한 연결: DataManager가 데이터를 가져온 후, 클로저를 통해 결과를 ViewController에 전달하는 방법법이 있으며, 이 방법은 비동기 작업에 특히 유용하며, 코드의 가독성을 높일 수 있다.
class DataManager {
func fetchData(completion: @escaping ([Data]) -> Void) {
// 데이터를 가져오는 로직
let data = [Data]() // 가정
completion(data)
}
}
class ViewController: UIViewController {
var dataManager = DataManager()
func reloadData() {
dataManager.fetchData { [weak self] data in
// 데이터를 사용하여 UI 업데이트
}
}
}
728x90
'iOS 앱 개발자 프로젝트 > iOS 숙련' 카테고리의 다른 글
[iOS] 기술 면접 준비 (2) | 2024.04.16 |
---|---|
[iOS] WishList App (feat. CoreData) (0) | 2024.04.14 |
[iOS] Decodabe, Encodable, Codable (0) | 2024.04.13 |
[iOS] URLSession (0) | 2024.04.12 |
[iOS] Core Data stack (0) | 2024.04.12 |