읽고있는책

[코틀린리액티브] 01. 리액티브 프로그래밍 소개

DeveloperRio 2020. 5. 15. 12:01

코로나 사태로 인해 갑작스런 재택근무를 다시 하게 되었다.

이참에 새로운 느낌으로 기존에 공부하고 있던 JPA 를 슬쩍 닫아주고, 재택 기간동안 한권의 책을 파보자라는 생각으로 책을 구입했다.

 

01. 리액티브 프로그래밍 소개

 

리액티브 프로그래밍 정의는 '데이터 스트림과 변경 사항 전파를 중심으로 하는 비동기 프로그래밍 패러다임' 이다. 단어 하나하나가 이해가 안되는 건 아니다. 뜻도 알겠다. 하지만 와닿는 설명은 아니다. 책에서 예를 들어 주고 있는데 훨씬 와닿는다. 아래 예를 들어 설명한 내용을 보자.

 

리액티브란 구글 시트에서 함수를 적용하고, 셀에 입력한 숫자를 수정하면 다른 셀에 있는 숫자가 자동으로 변경되는데 이를 리액티브라고 한다. 다시 생각해보면 정의만 읽으면 어려워 보이지만 우리가 이미 이해하고 쓰고 있는 메커니즘이다.

 

다음으로 함수형 리액티브 프로그래밍을 적용해야 하는 이유를 말한다. 이제 리액티브 정의 이해했는데 함수형? 적용해야 하는 이유? 잘 모르겠지만 일단 책에 있으니까 명시하고 그냥 넘어가자.

 

콜백 지옥의 제거, 오류 처리를 위한 표준 메커니즘, 간결해진 스레드 사용, 간단한 비동기 연산, 전체를 위한 하나-모든 작업에 동일한 API, 함수형 접근, 유지 보수 가능하고 테스트 가능한 코드

 

그리고 리액티브 선언 은 '응답성, 탄력성, 유연성, 메세지 기반' , 4가지가 리액티브 선언에서 말하는 특징이라고 한다.

 

요약해서 '좋다'

무슨 말인지 모르겠고 '계속 직접 책을 읽어가면서 내가 설명할 수 있게 이해하자' 라고 생각한 뒤 패스.

RxJava, RxKotlin 을 공부하면서, 위의 장점들을 나중에 다시 보자. 

 

RxJava 의 푸시 메커니즘과 풀 메커니즘 비교

 

Pull 메커니즘

fun main(args: Array<String>){
    var list:List<Any> = listOf("One", 2, "Three", "Four", 4.5, "Five", 6.0f)
    var iterator = list.iterator()
    while (iterator.hasNext()){
        println(iterator.next())
    }
}

while 루프에서 iterator 을 이용해 데이터를 당겨오고 있다.

마치 명단을 가지고 있는 사람한테 "리스트에 있는 명단 불러줘" 라고 말하고 받아적는 꼴이다.

받아적는 사람은 명단을 가지고 있는 사람이 늦게 불러주면 늦게 적을 수 밖에 없다.

 

Push 메커니즘

fun main(args: Array<String>){
    var list:List<Any> = listOf("One", 2, "Three", "Four", 4.5, "Five", 6.0f)
    var observable: Observable<Any> = list.toObservable()
    observable.subscribeBy(
        onNext = { println(it) },
        onError = { it.printStackTrace() },
        onComplete = { println("Done")}
    )
}

위와 동일한 결과를 출력한다. 리스트를 생성하고 리스트에서 observable 인스턴스를 생성하여 구독한다.

주도권이 pull 과 다르다. 명단을 가진 쪽에서 "명단에 이거 있다" 만 말하고 구독한 쪽에서 받아서 행동을 결정한다.

 

리액티브 프로그래밍의 특징과 편리함을 설명하기 위해 뒤에 Calculator 프로젝트를 다루고 있으나, 읽고 아 그렇구나 싶고 기록하고 싶은 건 따로 없었다.

 

지금까지 느낀 건 번역이 깔끔하다. 뒤 책 내용이 더 기대된다.

반응형