NPE
1k
2017-05-20 05:11:01 작성 2017-05-20 05:16:25 수정됨
17
2584

Rx 관련 글이 있길래 끄적거려봅니다.


솔직히 처음 Rx 관련 라이브러리 보고 의아해 했습니다.

그냥 Observer Pattern + 함수형 프로그래밍 인데,

이게 왜 인기가 있는 지 별로 매력을 못느꼈거든요.


게다가 Observer, Subscriber를 한 곳에 기술한다는 자체가 결합도를 늘리는 행위인지라 마음에 안들었습니다.

(물론 분리할 수 있지만 그럴바에는 직접 Observer Pattern 작성하는거랑 다를 바 없기에...)


그냥 직접 Observer Pattern 구현하고 필요에 따라 그 안에 코드 기술하고 Callback 작성하는 게 더 깔끔하다 생각했는 데...


최근 다시 살펴보다가 신세계를 발견했네요.

결론부터 말하면 그냥 혼자 쓰면 별 매력이 없습니다.

Java 진영에서 OkHttp + Retrofit + Gson/Jackson + RxJava/RxAndroid

이렇게 결합하니까 엄청나게 강력하더군요.

정확히 말하면 Retrofit 자체에서 나머지 라이브러리들을 지원하는 라이브러리를 제공합니다.


보통 RESTful 통신을 하려면 http 클라이언트 관련 작성,  json 파싱등 상당히 귀찮은 작업이 필요한 데

이를 모두 다 추상화 시켜서 원래 작성할 코드의 1/3로 할 일이 줄었네요.


Interface에 Observable 객체 하나 선언하고, 거기다 Annotation 지정해서 "여기다 데이터 담을거니까 파싱 알아서 해줘"

상당히 이상적인 느낌이네요.


관심있는 분들은 retrofit github에 들려보세요.



0
  • 댓글 17

  • 안드로더
    525
    2017-05-20 06:12:43

    죄송합니다. 그 강력한걸 느끼기도 전에 제가 개인 라이브러리로

    더 간결하게 만들어놓은게 있어서 그만 욱했습니다.

    저게 편하시면 저렇게 쓰시면 되지요.

  • fender
    26k
    2017-05-20 07:40:42 작성 2017-05-20 07:40:57 수정됨

    '파이프라인'과 '시간'이란 개념으로 일반화할 수 있는 모든 분야에 매우 유용하게 적용할 수 있는 도구인 것 같습니다.

    최근 취미로 만드는 게임 프로젝트에서 이벤트 관련 처리를 Rx 기반으로 구현했는데 기존 방식보다 훨씬 코드가 간결해져서 마음에 들더군요.


  • moonti
    5k
    2017-05-20 08:22:36

    안드로이드에서 여러계층으로 프래그먼트 만들거나

    또는 전체 앱이 클때 뭐하나 변경되면  일일이 이벤트 전달하는게 굉장히 코드가 길어지고 복잡하게 하죠.

    이벤트버스를 선호했는데 rx는 더 강력하게 쓸 수있어요

  • 안드로더
    525
    2017-05-20 08:44:46

    한개의 리퀘스트의 주소에 단 한개의 메서드에서만 호출할 수 있게하고..

    나머지는 콜백으루 알아서 하게 하면 되잖아요. 빼애액!!

    멀 귀찮게 다른걸 또 덕지덕지 붙일라구 그래요.

  • de
    2017-05-20 11:03:45

    웹진영에선 스프링 5에서 나올 web flux 가 미친듯이 좋을거 같더군요

    fender님 말대로 파이프라인과 시간이 중요한 개념인 비동기 논블럭 처리를 하는데 기존의 동시성 api 들보다 훨씬 간결하고 좋아보여요 ㅎㅎㅎ 

    안알못이라 스프링얘기하다 갑니다 ㅋㅋ

    rx는 js 에서도 눈부실정도로 좋습니다 ㅎㅎㅎ

  • NPE
    1k
    2017-05-20 11:14:12

    안드로더

    말씀하신 그 귀찮은 작업을 안할 수 있더군요. (메서드 및 콜백 직접 작성)


    만약 더 간단하거나 새로운 패러다임이 있으시다면 코드로 말씀해주실 수 있으신가요?

    한 수 배우겠습니다.

  • 안드로더
    525
    2017-05-20 12:19:04

    패러다임 이라고 할 것 까진 없구요, 

    HttpConnection 에 파라미터 삽입,

    json 파싱 클래스 지정,

    작업완료시 성공 실패 콜백 받음.

    끝 입니다.

    저거할라구 rx 쓴다구요? 전 안씁니다.. 만. 

    쓰고 싶으면 써야죠. 말리진 않겠습니다.


  • 안드로더
    525
    2017-05-20 12:20:30

    Rx 도 저에겐 된장같은 존재입니다.

  • 안드로더
    525
    2017-05-20 12:30:05

    자바갖고 할 수 있는일이 무궁무진 하잖아요.

    저런 라이브러리에 의존하지 마시고, 자신만의 구현법으로 멋지게 해결하는

    진짜 개발자가 되보시지 않으렵니까?

  • fender
    26k
    2017-05-20 13:19:02 작성 2017-05-20 13:19:49 수정됨

    안드로더 // 스프링은 왜 쓰고 서블릿은 왜 쓰나요? 소켓 코드로 멋지게 해결해서 '진짜 개발자'가 되야지.

  • 안드로더
    525
    2017-05-20 14:05:29

    답변갑니다. 소켓까진 모르겠구요. 서블릿 -> 스프링은 확실히 코드를 줄여주는데,

    콜백구현 -> Rx 의 경우엔 영 아니더군요.

    그냥 그렇다구요.. 프레임워크 수준에 코드 랩핑과 비교하시면 안되지요..

  • 안드로더
    525
    2017-05-20 14:10:10

    비난의 방향은 사실 제가 아니라 절 만족시키지 못한 Rx 개발자한테 향해야 할 것입니다.

  • fender
    26k
    2017-05-20 14:33:16

    안드로더 // 항상 그렇지만 모르는 건 죄가 아니고, 새로운 기술이라고 무조건 쓸 이유는 없습니다. 그런데 제대로 이해를 못하는 기술을 가지고 무슨 '된장'이니, 저런 거 쓰지 말고 '진짜 개발자'가 되라느니, 개발자를 비난해야 하느니 하면 비웃음을 사게 됩니다.

    여담입니다만, 코드의 크기는 패러다임이나 프레임워크의 가치를 판단하는데 있어서 유일한 기준도 아니고 좋은 기준도 아닙니다.

    사실 의존성 주입이나 웹 MVC 프레임워크도 따져보면 생각보다 코드를 크게 줄여 준다거나 하지 않습니다. 마음만 먹으면 정적 메서드로 유틸 클래스 만들고 공통 코드 메서드로 잘 뽑고 JSP include 잘 활용하면 코드 크기는 얼마든지 줄일 수 있습니다.

    지금이야 학원에서부터 당연한 듯 스프링부터 가르치지만, 처음에는 스프링이나 스트럿츠 같은 걸 쓰자고 하면 무겁다느니, 괜히 복잡해진다느니, 문제 생기면 따라가기 힘들다느니 하는 핑계로 부득불 앞서 말한 그런 방식의 개발을 고수하는 개발자들이 꽤 있었습니다.

    의존성 주입이나 MVC 프레임워크의 가치를 이해하는 사람의 눈에, 그런 발언을 하면서 스프링 무용론을 강변하는 개발자들이 어떻게 보일지 한 번 생각해보시기 바랍니다.

  • fender
    26k
    2017-05-20 15:29:42

    조금 부연하자면 단순 콜백에 비해 Rx가 가지는 장점은 이벤트 흐름에 대한 '파이프라인'을 구성할 수 있다는 점입니다.

    즉, 콜백은 어떤 신호가 오면 그걸 받아서 처리하고 끝나지만, Rx의 경우 이를 순차적으로 재처리하는 파이프라인을 구성하고 조합할 수 있습니다.

    그런 종류의 기능이 필요없는 코드에서는 Rx를 쓰나 콜백을 쓰나 별 차이가 없겠지만, 반대로 그런 개념을 적용했을 때 훨씬 코드가 간결해지고 직관적이 되는 경우는 얼마든지 있습니다.


  • NPE
    1k
    2017-05-20 15:37:03

    fender

    조언 감사합니다.

    계속 Rx를 써보려고 해도 말씀하신 부분에서 계속 의아함이 들었습니다.

    그냥 직접 Callback 메서드 내에 기술하는것보다 코드가 짧아지니까 약간 더 편한 것, 그리고 stream api를 사용하면서 성능저하 두 가지가 계속 걸렸거든요.


    아직 본격적으로 접하지 않아서 말씀해주신 경우들을 못접해봤지만 더 연구해봐야겠습니다.

  • 안드로더
    525
    2017-05-20 15:52:34

    그러면 레트로핏은 살려두고 rx 대신할만한거 찾아서 쓰세요.

    괜히 의아한거 자꾸 붙들고 있어봤자임다.

    하 이거촴. 제가 장담은 못하지만 조만간 레트로핏 같은 라이브러리 만들어서 git에 공개해볼랍니다.

    -1
  • Terry Lee
    34
    2018-08-10 11:43:47
    혹시 그런 라이브러리 만들어서 공개하셨는지요? 써보려고 하는데...
  • 로그인을 하시면 댓글을 등록할 수 있습니다.