일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Rxjava
- 암호학
- pandas
- architecture
- androidStudio
- Coroutine
- Gradle
- android
- Python
- Codeforces
- boj
- activity
- GitHub
- 프로그래머스
- textfield
- ProGuard
- TEST
- Compose
- 백준
- 코루틴
- 쿠링
- Hilt
- relay
- AWS
- livedata
- MyVoca
- Kotlin
- MiTweet
- 코드포스
- Coroutines
- Today
- Total
목록Primary/Kotlin (39)
이동식 저장소
VSCode에서는 유난히 JVM 언어를 사용하기가 어렵다. 물론 내가 JVM의 구조를 정확히 몰라서겠지만, 항상 컴파일 문제가 내 발목을 잡았다. 그러나, 어제 드디어 C++와 완전히 같은 Kotlin 컴파일 환경을 구축했다. 이제 파일별로 컴파일하고 실행할 수 있다! 나와 같은 문제를 겪은 분들을 위해 나의 해결법을 공유한다. 주의: 이 글은 윈도우 환경을 기준으로 작성하였으며, 단어(환경 변수 등)를 일일이 설명하지 않습니다. 1. kotlinc 설치 ``kotlinc``는 코틀린 파일을 JVM, JS 등 적절한 타겟으로 컴파일하는 컴파일러이다. 아래 링크를 통해 최신 버전을 다운로드하자. 2022년 2월 25일 기준으로 최신 버전은 ``1.6.10``이다. Kotlin command-line com..
목차 문제 정의 Volatile? Thread-safe가 필요하다 Thread confinement: fine-grained Thread confinement: coarse-grained Mutual exclusion Actors 참고 문헌 Dispatchers.Default 등의 멀티 스레드 dispatcher를 사용하면 여러 개의 코루틴을 동시에 실행할 수 있다. 이 과정에서 여러 동시성 문제가 발생할 수 있다. 가장 대표적인 문제로 shared mutable state가 있다. 운영체제 과목을 수강한 적이 있다면 잘 알고 있을 것이다. 요약하자면 수정 가능한 값에 여러 스레드가 동시에 접근하려고 할 때 어떻게 해야 하는지에 대한 문제이다. 값을 읽기만 한다면 모를까, 동시에 수정하려고 하면 매우 큰..
목차 예외 전달 CoroutineExceptionHandler 코루틴의 취소와 예외 예외가 여러 개라면 Supervision Supervision job Supervision scope Supervisor job에서의 예외 처리 참고 문헌 코루틴이 취소되면 CancellationException이 발생한다. 이번 글에서는 코루틴이 취소되는 다양한 경우에 대해 알아본다. 예외 전달 코루틴 빌더는 launch와 actor처럼 예외를 자동으로 전달하는 종류와 async와 produce처럼 사용자에게 의존하는 종류로 나눌 수 있다. 루트 코루틴(어느 코루틴의 자식도 아닌 코루틴)을 만들 때, launch 등은 예외를 Thread.uncaughtExceptionHandler에서 즉시 처리한다. 예외가 발생하면 자..
목차 Channel Channel 종료 Producer-Consumer 패턴 파이프라인 분산처리 역(逆) 분산처리 Buffered Channels Channel은 평등하다 Ticker Channel Flow와 Channel의 차이 Deferred를 사용하여 코루틴 간에 하나의 값을 전달할 수 있다. 여러 개의 값을 전달할 때는 channel을 사용할 수 있다. Channel Channel은 개념상 BlockingQueue와 매우 비슷하다. 차이점이 있다면 BlockingQueue는 값을 전달하는 과정에서 스레드를 block하지만, Channel은 스레드를 block하지 않고 suspending 한다. val channel = Channel() launch { for (x in 1..5) channel.s..
suspending 함수를 이용하여 비동기적으로 값을 계산할 수 있다. 그런데 비동기적으로 계산되는 값이 여러 개라면 어떻게 할까? 예를 들어 1번부터 n번째까지의 피보나치 수를 1초에 하나씩 계산해서 반환하는 함수가 있다고 하자. 물론 모든 결과가 계산될 때까지 기다리는 방법도 있지만, 결과값이 반환될 때마다 하나씩 출력하는 것이 성능 측면에서 더 좋을 수 있다. 코틀린의 Flow를 이용하여 비동기적으로 계산된 값을 하나씩 받을 수 있다. 컬렉션 복습 collections을 이용하여 여러 개의 값을 표현할 수 있다. 다음의 코드에서 simple 함수는 세 개의 정수로 이루어진 List를 반환한다. fun simple(): List = listOf(1, 2, 3) fun main() { simple()...