상황 설명 : 코인 정보 앱을 만드는데, 코인의 정보를 관리하는 뷰모델을 싱글톤으로 구성하고, 옵저버블 패턴으로 하나의 뷰모델이 여러 뷰를 관리하는 상황.
싱글톤을 사용한 이유는,
1. 뷰마다 데이터가 달라질 것을 우려해서.
2. TabbarView로 인해 떨어져 있는 tableView나 Collection뷰들이 한꺼번에 Reload되면 좋을것 같아서.
3. 비슷한 기능들을 하는 Function들이 많아서.
그 이유로 싱글톤으로 구성하였는데,, 다음과 같은 문제들이 생겼습니다.
대안을 생각해보았을때.
1. 데이터 자체 부분은 싱글톤으로 구성한다. +) 주기적으로 데이터를 Fetching하는 부분도 같이 제공
2. ViewModel은 싱글톤이 아닌 인스턴스화 한다.
3. ViewModel은 Data Singleton을 소유한다.
4. NotificationToken을 누가 갖고 있어야 하는가가 제일 고민입니다. 싱글톤이 갖고 있고 데이터가 변경 되었을떄 여러 뷰모델에 이벤트를 전달하는 방식으로 구현할지, 아에 뷰모델이 갖고 있어서 데이터를 직접적으로 관찰하는 형태로 할지 고민이였습니다.
-> 싱글톤이 NotificationToken을 갖고 있으면 여러 뷰를 왔다갔다 했을때, 그리고 위의 문제인 같은 뷰를 여러 탭에서 띄웠을때의 문제를 대비할수가 없다는 결론, 뷰모델이 직접 싱글톤의 데이터를 관찰하는 형태로 구현해보겠습니다.