SwiftUI에서는 보통 MVVM을 많이 사용! 그동안 UIKit에서 사용해왔던 MVC는 Controller에 너무 많은 기능이 담긴다는 단점이 있었는데 그 단점을 해결할 수 있고, SwiftUI는 즉각적인 State변화가 가능하기 때문에 MVVM 구조로 데이터를 효과적으로 관리할 수 있음.
model
view
view model
더 나아가서 service(흔히, data manager)
기능을 최대한 분리
기본은 design과 API임을 기억하자! 나머지 아키텍처 설계는 그 때 그 때 분리하고 결합하는 형태!
✅ Combine
시간 흐름에 따라 값을 처리할 수 있음!
Declarative Swift API를 제공하는 프레임워크 : Stream하나를 만들고 그 Stream에 필요한 operator를 붙여서 사용하는 선언적인 프로그래밍 방식, 선언적인 프로그래밍이 되면서, 클로저를 이용한 콜백지옥에서 벗어날 수 있는 장점!!
사실 데이터를 처리할 때 클로저를 많이 사용하게 되면서 어느 시점에 데이터가 정확히 처리가 되는지 직관적으로 볼 수 없다는 단점이 있었는데 Combine을 사용하게 되면 보다 직관적으로 알 수 있게 될 것 같음.
클로저 중첩 같은 가독성이 떨어지는 코드를 간결하게 작성 가능 -> 유지 보수!
코드의 퀄리티를 높여줌
Asynchronous 프로그래밍 : 원래는 gcd를 통해 여러 thread를 직접 만들어줘서 관리를 해줬는데! combine을 사용하면 멀티 쓰레딩을 더욱 간편하게 활용가능!
async 작업들을 이벤트 처리 연산자로 결합하여 처리
Combine은 RxSwift보다 성능이 훨씬 향상
오..
Combine이 시간 비용도 좋고, 메모리 할당도 훌륭함!!
Combine은 first-party 프레임워크이고, RxSwift는 third-party이므로, Combine을 사용하려면 별도의 설치 없이 바로 iOS 13+에서 사용 가능함. 반면 RxSwift는 pod install해야 함.
Combine이 훨씬 성능이 좋은데 RxSwift는 왜... 사용할까?
ㅎㅎ..
Combine은 2019년에 발표되어 점점 적용되어가는 단계! 그리고 최소 지원이 iOS13이다 보니 아직은 많이 적용을 안하는 걸 수도 있음. 아마 RxSwift를 Combine이 대체하게 될테니, Combine을 많이 사용해보자.
결론적으로 Combine을 사용하게 되면 그동안 겪었던 비동기 이슈들을 해결할 수 있음!!!
Publisher : 이벤트 발생
Operator : 이벤트 가공
Subscriber : 이벤트 소비
Publisher의 상태 변화에 따라 Subscriber인 View의 변화가 나타나게 되는 흐름!