RxSwift에서 Delegate 패턴 사용하기 두번째 방법은 Subject와 Obervable을 활용하여 사용하는 방식입니다. 첫번째 방법에서는 Delegate를 만들기 위해 여러 복잡한 작업과 Objective-C에서 사용 가능한 데이터형만을 사용할 수 있었다면 두번째 방법은 좀 더 간단하면서 더 많은 데이터형을 사용할 수 있다는 장점이 있습니다.
첫번째 방법은 아래 링크를 참고해주세요.
RxSwift에서 Delegate 패턴 사용하기 (1/2)
Subject를 만들어줄 InputViewController는 TextField에 입력 된 문자열을 Confirm
버튼 클릭 시 ViewController에 전달하고, 전달된 문자열은 ViewController의 Label에 설정되게 됩니다.
InputViewController에 Subject와 Observable을 선언하여 줍니다. 여기서 Subject는 내부에서 호출되어지고, Observable은 외부에서 호출하는 역할을 하게 됩니다.
선언된 Subject를 이벤트 발생 시 호출하도록 합니다.
Subject 호출 후 바로 onCompleted()를 호출해야 Subject가 disposed 되어 Subject로 인한 메모리 누수가 발생하는 것을 방지합니다.
flatMap으로 ViewController를 호출한 후 선언 된 Observable을 리턴합니다. 그 후에 bind 또는 subscribe로 리턴 받은 Observable의 값으로 데이터를 처리하시면 됩니다.
Subject를 활용하여 Delegate 패턴처럼 사용하는 방법을 알아보았는데요. 첫번째 방법에 비해 코드도 간결해지고 한 곳에서 코드를 쭉 확인할 수 있어서 간단하고 가독성도 좋아진 것 같습니다.
하지만 모든 것들이 장점이 있다면 단점이 있듯이 Subject를 활용한 방법은 하나의 Subject만 만들어서 사용할 수 있다는 단점이 있습니다. 한마디로 여러 개의 Delegate 메소드가 필요한 경우에는 사용하기 힘들다는 것이죠.
이 부분은 제가 아직 RxSwift에 대한 이해도가 낮아서 방법이 있지만 찾지 못한 것일 수도 있기 때문에 100% 사용하지 못한다고는 할 수 없겠습니다.
이렇게 총 2개의 게시글로 RxSwift에서 Delegate 패턴 사용하기를 마무리하게 되었습니다.
감사합니다. 달콤한 코딩 되세요~!
swieeft/RxSwiftDelegateExample
[RxSwift][Swift3] Closure, Delegate 대신 Observable을 사용해서 응답값을 쉽게 처리하기 - 이상한모임