본문 바로가기

Kotlin

(10)
코루틴 suspending 함수 합성하기 1. Sequential by default 어딘가에 정의되어 원격 서비스 호출이나, 계산을 하는 유용한 suspending 함수 두개가 있다고 가정해봅시다. 우리가 유용하다고 가정했지만, 예제 목적에 따라서 실제로는 1초동안 딜레이를 하고 있습니다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are doing something useful here return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // pretend we are doing something useful here, too return 29 } 저 두 개의 함수를 순차적으로 호출한 뒤에 두 ..
코루틴 취소와 타임아웃 1. Cancelling coroutine execution 오래 동작하는 애플리케이션에서는, 백그라운드에서 동작하는 코루틴들에 정제한 제어가 필요합니다. 예를 들어서, 유저가 페이지를 닫을 수 있을것이고, launched된 코루틴은 이제 더이상 필요가 없어졌고, 연산은 취소되어야 할것입니다. launch 함수가 리턴하는 Job을 가지고 동작중인 코루틴을 취소할 수 있습니다. val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a bit println("main: I'm tired of waiting!") job.cancel() // cancels the ..
코루틴 basic 1. First Coroutine 코루틴은 일시정지가 가능한 연산 객체입니다. 특정 블록의 코드를 나머지 코드와 concurrently 하게 동작시킨다는 점에서 스레드와 유사하지만, 코루틴은 특정 스레드에서만 동작하지는 않습니다. 특정 부분에서 연산을 일시정지 할 수 있고, 연산을 다시 재개할 때는 다른 스레드가 연산을 수행할 수도 있습니다. fun main() = runBlocking { // this: CoroutineScope ( 코루틴 영역 ) launch { // 새로운 코루틴을 생성합니다. delay(1000L) // non-blocking 하게 1초를 기다립니다. println("World!") // 1초 기다린 이후에 출력 } println("Hello") // 메인 코루틴은 delay가 ..
코틀린 코루틴 개념 1. 코루틴의 장점 및 사용 이유 스레드는 생성할 때마다, CPU/메모리를 소모하기 때문에 귀한 자원입니다. 그렇기 때문에 스레드를 매번 생성할 수 없고, Pool로 관리를 해야 하는데, 만약 특정 작업을 진행할 때마다 (IO) 스레드가 block이 된다고 하면, 처리요청이 엄청나게 많아질 경우 그만큼 스레드를 많이 생성해야 하고, 스레드 사이에 자원 경쟁 때문에 효율이 떨어질 수 있습니다. 그래서, asychronous nonblocking 하게 코드를 작성하여 스레드를 block 시키는 시간을 최대한 줄여야 합니다. 이 때, 콜백 방법을 사용하고 콜백 방식은 복잡해지면, blocking 코드보다 보기 어려워지게 됩니다. +) spring reactor 같은 기술을 이용하면 어느정도 깔끔하게 작성할 수..
코틀린 1.4, 1.5 버전에서의 변경사항 코틀린/JVM 1.4 버전, 1.5 버전에서 주목할만한 변경사항들을 요약해보았습니다. 제가 생각했을 때 코드를 작성하면서 도움이 될만한 내용들 및 코틀린/JVM에 해당되는 내용만 요약했기 때문에 때문에 전체 변경사항을 보고 싶으시다면 https://kotlinlang.org/docs/releases.html 으로 가셔서 전체 릴리즈 노트를 확인하시면 됩니다. 언어의 특징 및 개선사항 네임드 파라미터와 일반 파라미터를 혼합하기 Trailing comma 루프 내부에 표현식이 있는 경우 break, continue의 사용 Sealed 인터페이스와 Sealed 클래스 개선사항 1. 네임드 파라미터와 일반 파라미터 혼합해서 사용하기 코틀린 1.3 에서는, 함수를 네임드 파라미터로 호출할 경우, 네임드가 아닌 파..
(번역글) kotlin 1.5.20 릴리즈 노트 코틀린 1.5.20에서 새로 추가된 것들 코틀린 1.5.20 에서는 1.5.0의 새로운 기능들에서 발견된 이슈들을 해결했고, 도구들에 대해 다양한 개선사항들이 있었습니다. 코틀린/JVM 코틀린 1.5.20에서는 JVM 플랫폼에 아래와 같은 업데이트 들이 있었습니다. invokedynamic을 통한 String concatenation JSpecify nullness 어노테이션에 대한 지원 코틀린과 자바 코드에서 롬복에서 생성된 메소드들을 호출하는 것에 대한 지원 invokedynamic을 통한 String concatenation 코틀린 1.5.20 JVM 9이상을 타겟으로 할 경우 invokedynamic을 이용하여 string concatenation을 컴파일합니다. 더 간결하게 말하자면, strin..
(번역글) 코틀린 1.5.0 버전 릴리즈 노트 코틀린 1.5.0 버전에서는 새로운 언어적 기능, 안정적인 IR 기반 JVM 컴파일러 백엔드, 성능 향상, experimental 한 기능들에 대한 안정화 같은 점진적인 변화와 이전 내용들에 대한 deprecating 등이 있습니다. 새로운 언어적인 기능 코틀린 1.5.0에서는 1.4.30에서 미리 선보였던 기능들에 대한 안정적인 버전을 제공합니다. JVM records 지원 Sealed 인터페이스와 sealed 클래스 개선사항 Inline 클래스 JVM records 지원 자바는 아주 빠르게 진화하고 있습니다, 그리고 코틀린에서는 그에 맞춰서 호환을 확실하게 유지하고 있습니다. 우리는 최근에 추가된 기능중 하나인 record 클래스를 지원하기 시작하였습니다. 코틀린은 JVM records 에 양방향 호..
(번역글) 코틀린 1.4.30 릴리즈 노트 코틀린 1.4.30에서 새롭게 추가된 것들 코틀린 1.4.30에서는 새로운 기능에 대한 preview를 제공합니다. 코틀린/JVM 컴파일러의 새로운 IR 백엔드는 알파단계로 올라갔고, 다양한 성능, 기술적인 개선사항들이 있습니다. 언어적 특징 코틀린 1.5.0에서는 새로운 언어적 기능을 제공할 예정입니다. JVM record 지원, sealed 인터페이스, 안정적인 inline 클래스들 등이 있습니다. 코틀린 1.4.30에서는 이러한 기능 및 개선들을 preview 모드로 사용해볼 수 있습니다. YouTrack 티켓으로 피드백을 전달해주면 감사드리겠습니다. 그리고 1.5.0 릴리즈 이전에 반영해두겠습니다. JVM records 지원 sealed 인터페이스와 sealed 클래스 개선사항 inline 클래스..
(번역글) 코틀린 1.4.20 버전 릴리즈 노트 코틀린 1.4.20에서 새로 추가된 것들 코틀린 1.4.20에서는 새로운 experimental 기능과, 기존에 존재하던 기능에 대한 성능향상 및 버그 수정 등이 있었습니다. 코틀린/JVM 코틀린/JVM에서는 최신 자바 버전의 기능들을 따라잡는 방향으로 개선사항들이 있었습니다. 자바 15 타겟 invokedynamic string concatenation 1. 자바 15 타겟 코틀린/JVM 타겟으로 자바 15버전을 사용할 수 있게 되었습니다. 2. invokedynamic string concatenation invokedynamic string concatenation은 experimental 기능으로 언제든지 없어질 수 있고, 변경될 수 있습니다. 코틀린 1.4.20에서는 JVM 9이상이 타겟일 경우..
(번역글) 코틀린 1.4.0 버전 변경 사항 코틀린 1.4.0 버전에서 새로 추가된 사항들 코틀린 1.4.0에서는 여러 구성요소들에 대해 질적인 면, 성능적인 면에 초점을 둔 개선사항들을 담았습니다. 아래에서 코틀린 1.4.0에서는 주요한 변화들을 찾을 수 있을 것입니다. 언어의 특징 및 개선사항 코틀린 1.4.0은 다양한 언어들의 특징과 개선사항을 담고 있습니다. 코틀린 인터페이스를 위한 SAM 변환 라이브러리 저자에 대한 명시적 API 모드 네임드 파라미터와 일반 파라미터를 혼합하기 Trailing comma Callable reference 개선사항 표현식이 루프 내 있는 경우 break, continue의 사용 1. 코틀린 인터페이스를 위한 SAM 변환 코틀린 1.4.0 이전에는, SAM (Single Abstract Method) 변환을 ..