🛠️ 문제 상황

final class UserSettingManager: UserSettingManageable, @unchecked Sendable, ObservableObject {
    @Published var userData: UserData 
    private let userDataStorage: Persistable
    
    // MARK: Init method
    
    init(userDataStorage: Persistable) {
        self.userDataStorage = userDataStorage
        self.fetch()
        
    }

기존에는 위와 같이 클래스 객체 생성 시, userData 주입 없이도 기본 값을 초기화하고 init 메서드를 통해 초기화하고 있다.

이때 클래스 초기화 시, 저장프로퍼티가 초기화 → init() 와 같은 순서로 초기화가 진행되어 아래의 문제가 발생한다.

  1. 저장프로퍼티가 초기화되면서 이벤트를 발행( Publish )
  2. 사용자 설정 화면에서 UI가 반응하므로, 초기값에 의해 사용자 설정 화면이 변경
  3. 이후 init 메서드의 fetch()를 통해 사용자 설정 화면이 다시 변경

이때 toggle 버튼 상태가 바뀌면서 사용자가 토글버튼을 누르지 않아도 onChange 의 클로저가 실행되어 문제를 일으켰다.

💡 해결 과정

📜 참고 자료

https://medium.com/@r1verfuture/swift-unusernotificationcenter-2-c6d15739c8d9