brunch

You can make anything
by writing

C.S.Lewis

by 으아한구렝 Mar 01. 2018

4. Observables and Subjects...

in Practice

드디어 practice입니다. 샘플코드는 deprecate된 Variable을 사용하고 있습니다. RxCocoa.BehaviorRelay로 대체합시다. 가장 큰 차이는 Variable.value와 BehaviorRelay.value 인데, 같은 이름이지만 BehaviorRelay.value는 get only property 이기 때문에, event emit을 위해서는 BehaviorRelay.accept(Element)를 사용해야 합니다.


Combinestagram이라는 프로젝트를 소개하고 있는데, 이미지를 선택하면 최대 6장까지 collage를 만들어주며 앨범에 저장 기능을 제공합니다. Observable/Subject가 사용되는 곳은 네군데입니다.

1. 이미지가 변경되었을 때, collage 화면을 업데이트.

2. 이미지가 변경되었을 때, 타이틀과 버튼들을 업데이트.

3. Save 버튼을 눌렀을 때, 앨범에 저장 후 결과를 event로 받아 화면에 표시.

4. PhotosViewController가 property로 갖고 있는 obsavable을 MainViewController가 subcribe해서, 이미지가 추가로 선택되었을 때 자신의 observable에게 다시 event를 emit.


RxSwift traits in practice

챕터2에서 소개되었던 traits를 다시 한번 언급하고 있습니다.

Single: .next + .completed pair입니다. file I/O, network I/O처럼 asynchronous operation 이면서 1개의 value를 기다리는 경우에 사용합니다. Source sequence가 2개 이상의 value를 emit하면 error를 던집니다.

MayBe: Single과 비슷하지만, .next(value)가 emit되지 않고 .completed를 줄 수도 있습니다. 그 경우에 복구로직을 심거나 할 수 있을 것 같습니다. 앨범에 이미지 저장을 하기 위해 먼저 open(albumId:)를 호출하는 경우를 예로 들고 있는데, 해당 앨범이 존재하지 않는 경우 앨범을 새로 생성한 후 진행하는 것이 가능해집니다.

Completable: .completed와 .error만 emit합니다. value는 필요치 않고 completion 여부만 필요한 경우에 사용하게 됩니다. 다른 trait과 달리 Obsavable.asSingle(), Obsavable.asMayBe() 같은 방법으로 생성할 수 없습니다. .next를 emit해서는 안되는데, source obsavable에서 해버릴 수도 있기 때문입니다. 그런 이유라면 Single이나 MayBe도 비슷할 것 같은데 여튼 Completable만 그렇습니다.



의문점 / 공부할 부분

Combinestagram에서 Rx가 사용된 수준은 일반적인 delegation/callback과 큰 차이가 없어보입니다. Rx 컨셉이 platform independant하다고 하면 장점은 되겠지만... 사실 처음부터 여러 platform을 다 지원했던 건 아니니까?

진도를 좀 더 빨리 나가야할 것 같습니다.



작가의 이전글 3. Subjects
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari