RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀
여담으로 시작하겠다.
여담1 : Rx 공부를 계획한 계기
Rx를 사용하지 않고, 지난 겨울 휴학을 하면서 스타트업의 iOS 앱개발을 git init
부터 시작해 앱스토어 출시까지 혼자 진행했었다.
Rx없이도 요구한 기능이 다 잘 작동했기 때문에 굳이 Rx를 써야할까에 대한 의문이 많았다. 어쩌면 러닝커브가 높은 Rx를 공부보다 늘 하던 방식으로 개발하면서 보여지는 기능에만 집중하려고 했던거 같다.
그럼에도 불구하고 Rx를 늘 배우려고 계획을 한 이유는 크게 세가지였다.
첫째, 현업에서 Rx를 많이 사용하는 추세고, Rx + MVVM 패턴을 익혀 다른 iOS개발자랑 원할히 소통과 작업을 하고 싶었기 때문이다.
두번째, RxCocoa를 활용하면, UI의 event 처리가 직관적으로 해석이 가능한 점이었다. 다른 기술블로그를 보았을때, 이부분은 정말 논리의 흐름대로 해석이 가능했다.
마지막 이유는 늘 하던 패턴으로 개발을 하다보니, 스스로의 발전이 없는거 같았다. 새로운 것을 배우면서 느낄수 있는 열정🔥을 동기부여로 발전을 해보고 싶었다.
TMI였을것 같지만... 아무튼 이번 딴딴클럽을 계기로 21일간 꾸준히 RxSwift를 포기하지 않고 공부해서 개발을 할 때 적용해볼것이다.
여담2 : 왜 Rx를 써야할까에 대한 생각을 기록에 남기기로 한 이유
딴딴클럽의 테드의 좋은 의견 (Rx를 쓰면 확실히 좋겠구나! 이부분 적어보기) 덕분에 RxSwift를 공부하면서 정기적으로 내가 느낀부분을 적어나가보고자 한다.
21일이 종료되고, 그동안 적었던 느낀부분들을 되돌아보는 것도 좋은 경험일것 같다고 생각했기때문이다. (감사합니다 테드👏👏)
나의 취미인 크로스핏을 예로 들었다.
크로스핏게임즈에서 2월 말부터 오픈 이벤트를 진행하는데, 오픈 이벤트가 주마다 공개가 된다. 공개가 될 때 마다 게임즈에 참여하는 사람들에게 알려주는 코드를 작성해보았다.
output은 위의 사진과 같고, 두가지 버전으로 작성하였다.
하나는 옵저버 패턴을 따라서, 또다른 하나는 RxSwift (PublishSubject) 를 활용해서 작성했다.
코드 전체는 깃헙링크에서 확인 가능하다.
두 코드를 비교해보면, (물론 주석에 설명과 output을 달아놓아서 좀 코드수가 길다) 확실히 Rx를 사용한 코드가 훨씬 짧다.
위의 output과 다른점은, 바로 종료이벤트가 있는 점이다.
rx코드 일부를 보면,
let athlete1 = crossfitGames.subscribe(
onNext: { announce(eventWOD: $0, athlete: "athlete1") },
onError: nil,
onCompleted: { print("🏋🏻♀️athlete1님, 수고하셨습니다👏 모든 이벤트가 종료되었습니다") },
onDisposed: nil)
athlete1.disposed(by: disposeBag)
onCompleted 일때 이벤트를 바로 처리가 가능하다.
지금, observable과 observer 를 배운 시점에서 생각이 드는 rx의 이점은 위의 두가지이다.
내가 생각하는 이점들을 Rx에 차차 적용해나가 Rx를 기깔나게 쓰는 신입개발자라는 목표에 꾸준히 달려가야겠다.
코드를 보면,
let crossfitGames = PublishSubject<String>()
이렇게 선언을 한 부분이 있다.
다음 포스팅에 Subject에 대해 자세히 기술을 하려고 한다.
미리보기 느낌으로 왜 PublishSubject를 썼는가에 대해 적어보겠다.
더 자세한 부분은 다음 글에서 기술하겠다.