아.. 최근 기획 심의와 시험기간 이슈로 인하여 학습에 조~~금 소홀했다(사실 핑계😭)
그래도 같이 기획을 진행한 우리팀 진짜 완전완전 열심히하고 고생했다..! 제발 통과해라..!!
이제 진짜 즐거운 개발 시작!!
📙 View와 ViewModel
일단 이번 주는 개발을위해 View에 대하여 다시 학습하기 시작했다.
우선 View를 학습하기 전에 저번에 학습한 viewModel에 대하여 다시 학습하였다.
📚 ViewModel
- ViewModel = View에서 사용할 데이터를 홀드하는 친구
- UIState, ViewModel(iOS), RandObject(RO) = observe의 대상
- 결국 중요한 것은 ViewControllerdptj Observe 하는 것 = Collect = ObserverPattern
- 그럼 Observe한다는 것은??
= Observe당하는 친구(ViewModel)가 바뀌면 그에 맞춰 View가 변경되어야 한다!
📚 View
그럼 View는 그냥 observe하다 변경만 되는 친구인가?? 라는 생각이 들어 view에 대하여 학습했다.
- 우리가 만드는 모든 view는 Tree구조다(자료구조)
- 루트 View부터 시작하여 연결된 모든 view가 변화하게 해야한다
- 근데 이렇게 하면성능 저하 발생할 수있다.
- 이유 :
- redrawing이 반복적으로 발생할 수 있다.
- 상태의 변화가 특정 부분에만 반영되어야 하는데 전부 넣어두고 쓰지 않는 경우
= 필요 없는 데이터를 넣어두면 해당 데이터를 반영할 필요 없는 UI가 반응한다
나중에 쓰겠지~~~ 금지!!!!😡
- producr 배포 전에 디버거 사용하여 확인후 출시할 것!!
- View에서 obserable한 친구를 보고있다 변경되면 view를 변경시킨다
- 그러면 ViewModel은 view당 하나가 좋을까 여러개가 좋을까???
- 전혀 겹치치 않는게 있고 그리고 각각이 너무 크다면?
- 하나에 넣으면그 크기가 너무 커진다 = 관리해야 하는 Data가 너무 많아짐
- 어떤 ViewModel, Class를 재사용 할 수 있을지 고려!
- 재활용이 사능하다면 나누는것이 좋다!
- CustomView를 낀 경우
- CustomView가 복잡하면 일단 분리되어 데이터를 받았을 때 refresh하는 데이터 구조 필요!
- 커스텀 뷰와 해당 데이터를 다루는 dataClass가 필요하다! 👉 재활용과 확장성
- ViewModel에서 재활용 성이 있는 요소는 따로 빼서 DataClass로 만들어야 한다
- Hot Stream/Observer로 다루는 View
- Hot Stream = 그 결과만 보여준다
(유튜브 라이브 👉 이전에 있던 것이 아니라 지금것만 딱 보여준다)
- Cold Stream = 결과까지의 모든 과정을 보여준다
(넷플릭스 👉 이전에 녹화되어 있는 것 까지 볼 수 있다)
- 네트워크 API에서도 잘 생각해야한다
- ViewModel이 View를 알면 MVP랑 다를게 없음 👉 메모리릭 발생
- View에서 ViewModel의 함수를 실행시켜 함수의 결과값을 가져와야 한다면??
- ViewModel의 A=1, B=2일때 View에서 A+B의 값이 필요하다면?
- A+B=c인 c를 observing해야지 직접 View에서 ViewModel에 요청하게 만들면 안티패턴!!
후.. 공부하다 보니까 어찌저찌 다시 Clean Architecture까지 보게 되었는데 저번에 조금 이해 안갔던 것을 다시 보게 되었다
- 외부 = 저수준
- 내부 = 고수존(핵심 Logic)
- 플렛폼 의존이 없어야한다.
- import해서 돌아가는 코드가 있으면 안된다!! = 언어 수준에서 돌아가도록 작성