Kotlin
-
Kotlin) 정규 표현식 정리Kotlin 2021. 8. 17. 00:10
정규 표현식 정규 표현식 또는 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어. 어떤 문자열에서 특정한 조건의 문자열을 찾고 싶을 때, 그 조건이 복잡한 경우 유용. 예를 들어 비밀번호 설정(최소 8자리에 숫자, 문자, 특수문자 각각 1개 이상 포함 등) 정규 표현식 문법 ^ : 문자열의 시작을 의미. $ : 문자열의 끝을 의미. . : 문자 한 개를 의미. '.'이 위치한 곳에 어떤 문자든지 1개의 문자가 들어감. [ ] : 대괄호에 있는 문자 중 한 개를 의미. [abc]는 a, b, c 중 하나를 선택. [^] : not의 의미로, 대괄호에서 쓴다면 [^abc] : a, b, c 제외하고 나머지를 의미. | : or을 의미. a|b : a 또는 b. () : 공통되는 ..
-
Kotlin) Coroutine 공식 가이드 번역 06 - ChannelsKotlin 2021. 1. 25. 20:39
Channels Deffered는 코루틴 간에 단일 값을 편하게 전달하는 방법을 제공하지만, Channel은 Stream의 값을 전달하는 방법을 제공합니다. Channel은 Blocking Queue와 유사하게 동작합니다. 차이점은 아래와 같습니다. Blocking Queue Channel put send take receive 동시성이 필요한 여러 코루틴에서 순서를 보장받으면서 공유하여 사용할 수 있습니다. code fun main() = runBlocking { val channel = Channel() launch { for (x in 1..5) channel.send(x * x) } repeat(5) { println(channel.receive()) } println("Done!") } resu..
-
Kotlin) Coroutine 공식 가이드 번역 05 - Asynchronous Flow(2/2)Kotlin 2021. 1. 20. 23:01
Flow context flow로 만들어진 collection은 항상 이를 호출한 coroutine context에서 수행됩니다. 즉 flow는 context 보존 특성을 가지고 있습니다.이를 context preservation이라 부릅니다. code fun main() = runBlocking { foo().collect { value -> log("Collected $value") } } fun log(msg: String) = println("[${Thread.currentThread().name}] $msg") fun foo() = flow { log("Started foo flow") for (i in 1..3) { emit(i) result [main] Started foo flow [mai..
-
Kotlin) Coroutine 공식 가이드 번역 05 - Asynchronous Flow(1/2)Kotlin 2021. 1. 20. 19:18
기본적으로 suspending funcition은 비동기로 수행되는 연산을 수행한 후 한 개의 값을 반환할 수 있습니다. code suspend fun demoSuspendFun(): List { delay(1000) return listOf(1, 2, 3, 4, 5, 6) } result [1, 2, 3, 4, 5, 6] 이 경우에는 한 번에 모든 데이터를 반환합니다. 하지만 어떤 연산 후 두 개 이상의 값을 반환하려면 어떻게 할 수 있을까요? 각각의 수에 CPU 연산이 요구되는 어떤 일련의 수들을 처리하게 된다면 Sequence를 사용해서 작업할 수 있습니다. code fun longTask1(): List { Thread.sleep(1000) return listOf(1, 2) } fun longT..
-
Kotlin) Coroutine 공식 가이드 번역 04 - Coroutine Context and DispatchersKotlin 2021. 1. 15. 21:34
디스패처와 스레드 코루틴은 항상 Coroutine Context로 대표되는 어떤 context에서 실행됩니다. 코루틴의 context중 main 요소는 Job, dispatcher 입니다. code launch { // 상위 컨텍스트, main runBlocking 코루틴 println("main runBlocking : I'm working in thread ${Thread.currentThread().name}") } launch(Dispatchers.Unconfined) { 제한되지 않음 -- 메인 스레드와 함께 실행 println("Unconfined : I'm working in thread ${Thread.currentThread().name}") } launch(Dispatchers.Defa..
-
Kotlin) Coroutine 공식 가이드 번역 03 - Composing Suspending FunctionsKotlin 2021. 1. 15. 20:54
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/with-context.html 기본적으로 순차적 코루틴은 기본적으로 순차적으로 수행됩니다. 예제에서 공통으로 사용하기 위한 suspend 함수를 생성합니다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // 여기에서 어떤 유용한 일을 하고 있는 것처럼 동작합니다 return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // 여기에서 어떤 유용한 일을 하고 있는 것처럼 동작합니다 return 29 } code val time = meas..
-
Kotlin) Coroutine 공식 가이드 번역 02 - Cancellation and TimeoutsKotlin 2021. 1. 11. 18:22
코루틴 실행 취소하기 장시간 구동되는 어플리케이션에서는 백그라운드 코루틴에 대한 세밀한 제어가 필요합니다. 사용자가 코루틴을 시작시킨 페이지를 닫았을 수 있으며, 이제 그 결과를 필요로 하지 않고 해당 작업을 취소할 수 있습니다. launch함수는 실행중인 코루틴을 취소시키는 데 사용할 수 있는 job을 리턴시킵니다. code val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 약간 delay println("main: I'm tired of waiting!") job.cancel() // job 취소 job.join() // job의 완료를 대기 println("m..
-
Kotlin) Coroutine 공식 가이드 번역 01 - BasicsKotlin 2021. 1. 8. 14:37
코루틴 공부를 위해 코루틴 공식 문서 순서에 따라 글을 작성해 보려고 합니다. Coroutines? 우선 코루틴이 무엇인지에 대해 간략하게 알아보고 가겠습니다. 협력형 멀티 태스킹 동시성 프로그래밍 지원 비동기 처리를 쉽게 도와준다. ▶ 코루틴의 핵심은 경량 스레드 입니다. 코루틴의 시작 code import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch fun main() { GlobalScope.launch { // 새로운 코루틴을 백그라운드에서 실행 및 진행 delay(1000L) // 1초간 non-blocking 지연 (기본 시간 단위는 밀리세컨드) println("Wor..