본문 바로가기
IOS

[iOS] ReactorKit 프로젝트 Drrrible 뜯어보기(1)

by eigen96 2022. 10. 7.
728x90

https://github.com/devxoul/Cleverbot

(참고 링크)

 

GitHub - devxoul/Cleverbot: iOS Messaging Application using Cleverbot and ReactorKit

iOS Messaging Application using Cleverbot and ReactorKit - GitHub - devxoul/Cleverbot: iOS Messaging Application using Cleverbot and ReactorKit

github.com

 

https://github.com/devxoul/Drrrible

 

GitHub - devxoul/Drrrible: Dribbble for iOS using ReactorKit

Dribbble for iOS using ReactorKit. Contribute to devxoul/Drrrible development by creating an account on GitHub.

github.com

 

원래 현재 안정화 단계로 Bidit의 리팩토링을 진행해야 하는 상황입니다.

그 동안 Swift코드 스타일과는 거리가 먼 프로그래밍을 구사하고 있었고(자바 냄시...)
그전에 스위프트 문법 자체의 낮은 이해도, 리액터킷과 RxSwift 사용법의 미숙함을 극복해야하는 과제가 주어졌습니다.

멋쟁이사자처럼의 iOS 수업을 들으면서 Swift에 대해 생각했던 스스로의 오만함을 깨달았고 계속 공부중입니다.

 

다음은 리액터킷의 이해도를 높이기 위해 예제 프로젝트 코드를 분석해보고자 합니다.

이 프로젝트는 전수열님께서 리액터킷 github에 소개해주신 예제입니다.

 

원래는 Drrrible 프로젝트가 완성도가 높고 공부하기에 좋을 거라는 피터님의 조언을 듣고
바로 공부해보고자 Clone해보았습니다.

Rx사용법에 대한 요령도 분석하면서 터득해갈 수 있을 것이라 생각됩니다.

 

디렉토리 구조는 아래와 같이 구성되어있습니다.

 

//Input

유저의 액션이 먼저 발생하는 ViewController의 LoginViewController를 보겠습니다.

유저의 액션은 뷰컨트롤러의 bind()에서 받아들여지게 됩니다.

아래 코드를 보면 처음 loginButton을 tap하는 액션이 발생하였을 때

리액터로 로그인 액션을 전달하여 처리하며 모니터링 되고 있는 것을 알 수 있습니다.

 

//output

State 코드의 처음부분을 살펴보면 리액터의 State중에 isLoading만 가져오고

이 스테이트가 변경됐을 때만 distinctUntilChanged 아래쪽으로 실행되어

State가 뷰에 반영이 되도록 모니터링되는 것을 알 수 가 있습니다.

 

그리고 state 세번째 코드를 보면 isLoggedIn state만 불러오고 변동이 있을 시 아래 코드가 마찬가지로 수행됩니다.

filter를 통해 로그인 상태가 통과된것을 확인하고 presentMainScreen() 메소드를 호출하여 메인화면으로 넘어가는 것을 알 수 있죠.

 

이제 뷰쪽에서 넘어오는 이벤트를 처리하는 부분은 mutate에 들어가 있겠죠.

login 액션이 발생하였을 때 setLoading(true)Mutation을 발생시키며 현재 로딩중임을 알리고

authorize()라는 인증하는 메소드를 호출하는 것 같습니다. 해당 처리는 서비스 레이어로 넘긴 것을 알 수 있습니다.

다시 말해 해당 메소드는 서비스 레이어로 분리하여 구현되어있습니다.

 

 

728x90