본문 바로가기

iOS 프로그래밍/새로 배운 내용 정리

rxswift 와 mvvm 도전기1

 

대부분의 사람들이 mvvm 아키텍처를 사용하려고 할때 많은 이유가 있을 것 같습니다.

대다수의 사람들은 자신의 어플을 유지보수 하기 쉽도록 하기 위해서 일것 입니다.

저 또한 mvvm의 유용성에 대해 알게 되었고

도전하게 되었습니다.

RxSwift란? 그리고 MVVM이란?

처음 RxSwift와 mvvm에 대해 배우려 할때는 정확히 어떤 것이고 어떤 특성이 있는지 알아야 겠지요?

"RxSwift"

RxSwift 는 rx + swift로 ReactiveX와 swift의 합성어 입니다.

ReactiveX를 처음 들어보신 분들이라면 아직 이해가 잘 가지 않으시죠?

라고 위키 백과에서 나오는데요

동기 비동기의 개념은 전공자들이라면 아실 것이라 생각하고 넘어가겠습니다.

ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기식 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리

라고 합니다. 제가 생각하기로는 관찰 가능한 , 비동기식 이 두 키워드가 ReactiveX의 큰 특징인것 같습니다.

다들 Dispatch Queue를 사용하여 복잡한 코드로 비동기 처리를 해왔다면 이것을 간편히 할 수 있으며,

데이터가 바뀔때마다(이벤트 생성시마다) 그 이벤트를 관련 처리를 하는 곳에 따로 데이터를 주지 않아도 바뀐것을 알아채도록 관찰하능 한 반응형 익스텐션인 것입니다.

아직 이해 못하신분들을 위해 ReactiveX 에서 지원하는 Observer(옵서버) 패턴에 대해 추가로 코멘트 하자면

제가 기사 공부하고 있는 내용에는

Observer : 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴이다

- 주로 분산된 시스템 간에 이벤트를 생성 · 발행(Publich) 하고, 이를 수신(Subscribe)해야 할 때 이용한다

라고 되어 있네요

추가로 알고 싶으시다면 ReactiveX의 도큐먼트에서 보시면 될것 같습니다.

"MVVM"

MVVM은 Model + View + View Model를 합친 용어 입니다.

한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합한 MVC모델에 익숙한 저로서는 다소 생소한 모형입니다.

1. 구조

Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.

View : 사용자에서 보여지는 UI 부분입니다.

View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.

2. 동작순서

1. 사용자의 Action들은 View를 통해 들어오게 됩니다.

2. View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.

3. View Model은 Model에게 데이터를 요청합니다.

4. Model은 View Model에게 요청받은 데이터를 응답합니다.

5. View Model은 응답 받은 데이터를 가공하여 저장합니다.

6. View는 View Model과 Data Binding하여 화면을 나타냅니다.

3. 장점

1. 코드 중복을 줄일 수 있음

2. 반응형 UX 개발에 편리함

3. 모듈화하여 개발 가능

(Model, View, View Model 각 각의 구조가 독립적)

4. 기존의 MVC에서 ViewController에 너무 많은 소스들이 모여있는 구조를 벗어날 수 있다.

RxSwift 사용 기초 알아보기

이제 어떤 것인지 알았으니 RxSwift를 어떻게 사용하는지 알아야 할것 입니다.

제가 어떻게 사용하는지 알기위해 찾아본 사이트가 많지만 유용했던 사이트를 추천해 드리자면

https://pilgwon.github.io/blog/2017/09/26/RxSwift-By-Examples-1-The-Basics.html (RxSwift 기초)

↓↓↓ 이해를 위한 내용 중 좋은 부분 ↓↓↓

스마트폰은 관찰이 가능(observable) 합니다. 스마트폰은 페이스북 알림, 메세지, 스냅챗 알림 등과 같이 신호(signal)를 방출 합니다. 우리는 자연적으로 스마트폰을 구독(subscribe)하고 있고, 모든 알림을 홈 스크린에서 확인할 수 있습니다. 이제 그 신호(signal) 로 무엇을 할 지 정할 수 있습니다. 우리는 관찰자 (observer) 입니다.

https://pilgwon.github.io/blog/2018/10/09/Creating-an-iOS-app-with-MVVM-and-RxSwift-in-Minutes.html (RxSwift와 mvvm으로 iOS 앱 만들기)

https://github.com/iamchiwon/RxSwift_In_4_Hours

이 세가지를 추천해 드립니다.

 

특히 세번째 링크를 보시면 짧은 시간안에 기초를 다지실 수 있을 것입니다.

ReactiveX의 문서 보는 법까지 알려주시기 때문입니다.

이것을 따로 정리한 저의 블로그 포스팅입니다(링크)

 

mvvvm 사용 룰 정하기

다음으로 저만의 mvvm사용 룰을 정하려고 하였습니다.

저는 우연히 제가 좋아하는 어플인 '마이리얼트립' 에서 올린 mvvm으로 아키텍처를 바꾼 블로그를 보았고

여기서 나온

1. Two-Way Binding을 위해 UI 업데이트가 필요한 곳은 반드시 RxSwift를 적용한다

2. ViewController 하나당 ViewModel을 하나씩 생성한다

3. 관심사 분리하기(separation of concern)

이 세가지 룰을 최대한 지키며 앱을 개발하려 하였습니다.

https://medium.com/myrealtrip-product/%EB%A7%88%EC%9D%B4%EB%A6%AC%EC%96%BC%ED%8A%B8%EB%A6%BD%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-ios-%EA%B0%9C%EB%B0%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-51048dca4626 (참고한 사이트)

이렇게 개발을 시작하였는데요

저처럼 시작하려는 사람들이 많을 것 같습니다.

시작하려는 마음이 없다고 하셨을 지라도

제 포스팅을 보고 많은 분들이 함께 mvvm을 시작하고 댓글로 통해 소통하면 재미있을 것 같습니다.^^