본문 바로가기

책/코틀린 리액티브 프로그래밍

12. 리액티브 코틀린과 안드로이드 안드로이드에서 ToDoApp 개발 ToDoApp 해당 프로젝트 어디에서나 접근할 수 있는 전역 클래스이다. class ToDoApp:Application() { override fun onCreate() { super.onCreate() instance = this } companion object { var instance:ToDoApp? = null } } 다음과 같이 프로젝트의 매니피스트 파일에 ToDoApp를 application 으로 선언했다. .... BaseActivity 클래스는 onCreate 클래스를 숨기고 onCreateActivity를 제공한다. BaseActivity 를 상속 받으면 onCreateActivity를 재 정의 해야 한다. package com.rivuchk.todoa.. 더보기
10. 스프링 JPA와 하이버네이트를 사용한 REST API 스프링 부트, 하이버네이트 JPA를 사용한 REST API 이 프로젝트에서는 JPA를 사용한다. 따라서 JPA 의존성을 추가해야한다. gradle 에서 의존성 목록을 추가한다. comple('org.springframework.boot:spring-boot-starter-data-jpa') application.properties 에는 database 정보를 추가한다. ## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url = jdbc:mysql://localhost:3306/tododb spring.datasource.username = root spring.datasource.passw.. 더보기
10. 코틀린 개발자를 위한 스프링 웹 프로그래밍 소개 스프링 과 코틀린 스프링은 다음과 같은 개념을 이용 POJO 지향 프로그래밍 모델을 지원하도록 되어 있다. POJO란 특정 라이브러리에 종속되지 않게 순수한 코드로 프로그래밍 하는 것을 의미한다(기본 java 라이브러리는 제외) 의존성 주입(Depedency Injection) 제어의역전(Inversion of Control) 관점지향프로그래밍(Aspect-oriented Programming) 2017년 1월 스프링은 코틀린 지원을 발표 했는데 코틀린 지원의 이유는 자바로 작성된 라이브러리와의 상호 운용성이 뛰어 났기 때문이다. 스프링 어노테이션 기반 설정 스프링은 xml 기반 설정, 어노테이션 기반 설정 둘다 가능하다. 우선 어노테이션 기반의 설정을 알아보자.( xml 설정에 관한 부분은 aop 설정.. 더보기
9. 자원 관리와 RxKotlin 확장 자원관리 프로그램을 개발할때 자원은 사용하고 반드시 종료시켜줘야 한다. RxKotlin에서는 일회성 자원은 손십게 사용하기 위해 using 연산자를 사용한다. using 연산자의 정의는 다음과 같다. 리소스를 생성하고 반환하는 Callable 인스턴스를 입력받는다. 리소스 인스턴스를 만들기 앞서 첫번째 람다를 호출한다. 그런다음 구독할 수 있는 Observable을 반환하기 위해 리소스 인스턴스를 두번째 람다로 전달한다. 마지막으로 Observable이 onComplete 이벤트를 호출하면 세번째 람다를 호출해 리소스를 종료 시킨다. fun using( resourceSupplier: Callable , sourceSupplier: Function , disposer: Consumer): Observab.. 더보기
8. RxKotlin 애플리케이션 테스트 코틀린에서 JUnit 테스트 작성하기 gradle 의존성 추가 testCompile 'junit:junit:4.12' testCompile 'org.mockito:mokito-core:1.9.5' testCompile 'org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version' assertEquals() 는 두 매개 변수가 같으면 성공한다. 세번째 매개변수는 실패할 경우 출력하는 메시지 이다. package com.rivuchk.packtpub.reactivekotlin import org.junit.Test import kotlin.test.assertEquals class TestClass { @Test // 1 fun `my first test`() { //.. 더보기
7. RxKotlin의 스케줄러를 사용한 동시성과 병렬 처리 리액티브 프로그래밍은 기본적으로 멀티 스레드로 동작한다. RxKotlin은 기본적으로 단일 스레드로 동작하지만 비즈니스 로직과 요구사항에 따라 멀티 스레드를 쉽게 구현할 수 있는 다양한 연산자를 제공하고 있다. 동시성 소개 동시성을 예로 들어보면 집에서 요리를 한다고 가정하자. 양념을 가져오고, 야채를 자르고, 양념장을 재우는 세가지 작업이 있다면 혼자서 한가지씩 해야 하지만 가족구성원으로 있을 경우 동시에 한사람은 양념을 가져오고, 또 한사람은 야채를 자르고, 둘 중에 일을 먼저 마치는 사람이 양념장에 재우기를 할수 있다. 즉 메인스레드(자신), 워커스레드(가족구성원) 독립적으로 할 수 있는 일을 분배처리 하여 전체 프로그램이 더 빨리 실행될 수 있다. 병렬 실행과 동시성 병렬 실행과 동시성의 차이점 .. 더보기
6. 연산자 및 오류처리 프로듀서(옵저버블/플로어블) 결합 데이터를 사용하기에 앞서 여러 원천의 데이터를 결합하는 일은 일반적이다. 예를 들면 오프라인 우선방식에 따라 오프라인 애플리케이션을 구축하고 HTTP 호출에서 가져온 결과를 로컬 데이터베이스의 데이터와 결합하려는 상황이다. 기본적으로 프로듀서(옵저버블/플로어블)를 결합하는 몇 가지 메커니즘이 있는데 다음과 같다. 프로듀서 병합(Merging) 프로듀서 이어붙이기(Concattenation) 프로듀서 사이의 임의 결합 집핑 가장 최근 항목 결합 startWith 연산자 startWith는 다른 원천이 되는 옵저버블이나 Interator 인스턴스를 전달해 연산자가 구독하기 시작한 원천 옵저버블이 배출하기 전에 추가 할 수 있다. 주석 1 에서 startWith 연산자를 사용.. 더보기
5. 비동기 데이터 연산자와 변환 애플리케이션에서 비즈니스 로직과 동작을 구현하려면 블로킹 코드를 작성하거나 명령형 프로그래밍과 리액티브 프로그래밍을 혼합하는 대신 연산자를 사용해야 한다. 연산자를 사용하여 순수하게 반응형으로 유지하면 낮은 메모리 사용, 유연한 동시성 및 일회성(disposablility)들을 쉽게 얻을 수 있는데 명령형 프로그래밍과 섞어서 사용할 경우 효과가 줄어들거나 사라지게 된다. 필터링 연산자 프로듀서의 원하는 배출만 받고 나머지는 필터링 할 경우 사용한다. debounce 예를 들면 텍스트 입력 구현시 모든 키눌림에 대해서 연산을 원하지 않을 때 사용하는 연산자이다. 사용자가 실제로 원하는 키워드와 일치하는 쿼리를 얻을 수 있을 때까지 입력을 중단하기를 잠시 기다렸다가 다운스트림 연산자에게 전달한다. 주석 2 .. 더보기