Flow Synchronization(플로우 동기화)

suojae·2023년 11월 25일
0

[iOS] 아키텍쳐

목록 보기
7/11


Flow Synchronization이란?

  • 상위 계층의 데이터를 하위 계층에 전달하여 데이터를 동기화하는 절차적 방법
  • 장점: 서로 이웃해 있는 요소들끼리 데이터를 전달하므로 데이터 흐름 파악이 쉽다
  • 이웃한 화면들끼리 데이터를 공유해야하는 경우 플로우 동기화가 효율적
    ex01) UITableView에서 Cell을 탭했을 대 특정화면으로 이동하면서 해당 화면에 선택된 Cell의 데이터를 동기화
    ex02) 특정 UIViewController를 push하고 있으면서 이동하는 화면으로 데이터를 넘겨줄 때
    -단점: 동기화할 모든 요소들의 참조를 가지고 있어야하므로 참조 관리가 복잡해질 수도 있다

대표적인 Flow Sync: Notification Center

+---------------------+
|                     |
| UserProfileManager  |
|                     |
+----------|----------+
           |
           | posts notification
           | (userProfileUpdated)
           |
           v
+----------|---------------------------------+
| NotificationCenter                         |
+----------|---------------------------------+
           |
           | broadcasts to all observers
           |
           v
+----------|----------------------+  +------|--------------------+
|          v                      |  |       v                   |
| ProfileViewController observes  |  | OtherComponent observes   |
| and handles userProfileUpdated  |  | and handles userProfileUpdated |
+---------------------------------+  +---------------------------+

UserProfileManager

import Foundation

extension Notification.Name {
    static let userProfileUpdated = Notification.Name("userProfileUpdated")
}

class UserProfileManager {
    var userProfile: UserProfile {
        didSet {
            NotificationCenter.default.post(name: .userProfileUpdated, object: nil, userInfo: ["userProfile": userProfile])
        }
    }

    // Initializer and other methods
}

Profile View

class ProfileViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(userProfileUpdated(_:)), name: .userProfileUpdated, object: nil)
    }

    @objc func userProfileUpdated(_ notification: Notification) {
        if let userProfile = notification.userInfo?["userProfile"] as? UserProfile {
            // Update the view with the new profile
        }
    }

    // Deinitializer for removing observer
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}

Profile Model

struct UserProfile {
    var name: String
    var email: String
    // Other profile details
}
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글