본문 바로가기

iOS 앱 개발자 프로젝트/iOS 숙련

[iOS] DataManager & ViewController (relationship)

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 업데이트
        }
    }
}

 

 

찰떡 비유와 함께 설명해 주신 해롤드님 무한 감사..

 

 

'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