본문 바로가기
반응형

코틀린17

코루틴을 사용한 안전한 예외처리 - 2 앞의 글에서 이야기했던 두개의 코루틴(A, B)이 실행된다고 할 때 각각 걸리는 시간 A: 1초 B: 2초 A가 먼저 끝나고 B가 그 뒤에 예외가 발생함 B가 실행 중에 A에서 예외가 발생함 예외가 발생하면 어떻게 될까? 코루틴은 어떤 스코프에 있었는지에 따라 취소되거나 그렇지 않는다. 기본은 취소(Cancellation)가 된다. 아래 코루틴을 실행시키면 b가 실행되고 있는 동안 a가 먼저 예외를 발생시키고, 결과적으로 프린트 되는 것은 없다. 취소가 된 것이다. 그리고 main 스레드는 예외가 발생되어 프로그램이 종료된다. suspend fun parallelLaunchException_1() = coroutineScope { launch { // coroutine a delay(100) throw .. 2022. 1. 14.
코루틴을 사용한 안전한 예외처리 - 1 코루틴을 사용한 예외처리는 꽤나 까다롭다. 두개의 코루틴(A, B)이 실행된다고 할 때 아래 상황을 고려할 수 있다. 각각 걸리는 시간 A: 1초 B: 2초 A가 먼저 끝나고 B가 그 뒤에 예외가 발생함 B가 실행 중에 A에서 예외가 발생함 A, B 둘 다 예외가 발생함 A, B 를 실행시키고 있는 부모 코루틴에서 예외가 발생함 A, B 둘 중 하나에서 예외가 발생하였고 main스레드에 의해 runBlocking 안에서 실행되고 있을 때 결론부터 이야기하면 예외처리를 잘 하기 위해서는 국소적으로 try catch를 사용해주는 것이 권장된다. 아래는 CoroutineExceptionHandler에 나오는 docs 내용이다. If you need to handle exception in a specific .. 2022. 1. 14.
코루틴을 사용한 동시성, 병렬처리 - 2 지난 시간에는 코루틴이 무엇인지? launch 를 사용한 동시처리, 병렬처리 그리고 delay, sleep 의 차이를 예를 들어 context, dispatcher 까지 폭넓게 살펴봤다. 코루틴을 사용한 동시성, 병렬처리 - 1 비동기, 논블록킹을 다룰 수 있는 기술은 매우 중요하다. 모바일 웹 화면의 경우 기본은 싱글 스레드로 작동하는데 비동기,논블록킹을 적용하지 않으면 화면의 여러 인터렉션을 동시에 처리할 thisdev.tistory.com 이번에는 비동기 처리 (async) 를 어떻게 하는지 짧게 살펴보도록 하겠다. suspend fun parallelAsync_multiple() = coroutineScope { val a1: Deferred = async { delay(1000) "job1" }.. 2022. 1. 14.
QueryDsl 코틀린으로 안전하게 쓰기 예제소스는 깃허브에 있습니다. 코틀린을 사용하면 확장함수를 통해서 유용한 기능을 만들 수 있고, 이를 통해 안전하고 가독성 있는 코드를 짤 수 있어서 정말 편리하다. 사내에서도 코틀린을 사용한 유틸 함수들을 만들어 사용하고 있다. 오늘은 QueryDSL 에 관한 내용이다. JPA + QueryDSL 을 사용하다 보면 검색조건에 따른 dynamic query 를 작성하는 일이 잦다. Dynamic query는 아래와 같은 모습이 된다. 어떤 조건이나 파라미터의 유무에 따라서 query 의 where절을 붙여주는 형태이다. 값의 유무에 따른 로직은 코틀린의 ? (물음표 null safety) 으로 사용할 수 있지만 자바에서 사용하던 대로 if 문을 사용했다. // 검색 파라미터 data class Param.. 2022. 1. 11.
반응형