편집 : @Alrid의 코멘트
tl; dr
public abstract class Subscriber<T> implements Observer<T>, Subscription
따라서 Subscriber 는 구독 에 대한 추가 의미 가있는 Observer 의 구현입니다 (구독 취소에 대한 자세한 내용). 귀하의 질문에있는 코드 Observer
는 구현 (일반적인 프로그래밍 관행) 대신 인터페이스를 전달한다는 것을 보여줍니다 .
또한이 코드는를 반환합니다 Subscription
. 이는이 코드의 작성자가 Subscription
observable에 의해 생성 된 요소에 대한 액세스없이 클라이언트가 메서드 에만 액세스해야한다고 생각했기 때문일 수 있습니다 . 프로그래머 오류 일 수 있습니다.
긴 이야기
이 웹 사이트 (또는 책)의 내용을 읽어야합니다. http://www.introtorx.com
Rx.Net에 관한 내용이지만 개념은 매우 동일하며 Erik Meijer와 RxJava 구현자가 그 뒤를 따랐 습니다 ( Java 언어에 해당되는 경우).
이 페이지는 당신의 관심을 끌 것입니다 (두 번째 장입니다) : KeyTypes
여기 첫 번째 단락에서 읽을 것입니다.
Rx로 작업 할 때 이해해야 할 두 가지 주요 유형과 Rx를보다 효과적으로 학습하는 데 도움이되는 보조 유형의 하위 집합이 있습니다. IObserver 및 IObservable은 Rx의 기본 빌딩 블록을 형성하는 반면 ISubject의 구현은 Rx를 처음 사용하는 개발자의 학습 곡선을 줄입니다.
...
본질적으로 Rx는 Observer 패턴의 기초 위에 구축됩니다. .NET은 이미 멀티 캐스트 대리자 또는 이벤트 (일반적으로 멀티 캐스트 대리자)와 같은 Observer 패턴을 구현하는 몇 가지 다른 방법을 제공합니다.
유형 / API가 약간 다르더라도이 책을 통해 많은 것을 배울 수 있습니다. 아마도 일부 블로그보다 훨씬 더 많이 배울 것입니다.
이 책 이 말하지 않는 것 ( ... RxJava 구현에 있기 때문에 )
이때 RxJava 메인 개발자는 두 가지 유형의 계약을 구분할 수 있는 약간의 변형 (PR # 792 참조 )을 도입했습니다 .
- 알림->
Observer
- (un) 구독->
Subscription
이 변경으로 인해 RxJava 라이브러리의 구현 클래스에 대한 이러한 우려를 더 잘 표현 / 분할 할 수 있습니다.
그러나 라이브러리 사용자로서 RxJava 라이브러리의 실제 구현을 사용하는 것으로 충분합니다.
구독자를 구현하려면 훨씬 더 많은 지식, 작업 및 관리가 필요합니다. 실제로 구독 의미는 관찰 가능한 소스의 유형에 따라 매우 중요합니다 (핫 또는 콜드? 생성 비용이 많이 듭니까?)
위와 같은 경우가 Subscriber
아닌 노출 Observer
은 대부분의 경우 코드를 방해하지 않지만 구독 취소 의미가 필요하지 않는 한 의도 된 용도가 아닙니다. 그러나 결국,를 구현하면 다음 Subscriber
과 같은 일부 함정에 빠질 수 있습니다.
- 사용하지 않을 기능에 리소스를 소비
- 다른 클래스에서 상속 할 수 없습니다.
- 부정확 한 탈퇴 코드 작성
- 잘못된 코드 또는 다른 컨텍스트 용으로 작성된 올바른 코드 복사 / 붙여 넣기