비동기 프로그래밍이란 코드가 다 완료되지 않아도 다음 코드 라인을 실행할 수 있는 프로그래밍입니다. 동기 프로그래밍에 비해 성능 향상과 자원이 최적화되며 유연성과 확장성을 가지고 있어 복잡한 작업을 효율적으로 처리할 수 있게 해줍니다.
1. 비동기 프로그래밍
- 복잡한 작업은 백그라운드에서 실행, 완료되면 콜백 처리
- 쓰레드, 코루틴
2. 장점
- 동기 프로그래밍에 비해 성능 향상(작업 시간 단축)
- 자원 최적화 (네트워크 요청 받는 동안 cpu 다른 계산)
- 유연성과 확장성 (모듈화 및 재사용 용이)
3. 쓰레드, 코루틴
1) 쓰레드
- 프로세스 : 프로그램이 메모리에 올라가서 실행 된 것 (프로그램 더블 클릭)
- 프로세스보다 더 작은 단위
- 생성되면서 수행 할 때 각 독립된 메모리 영역인 STACK 가짐
2) 쓰레드 예시
- 사전 작업 : build.gradle 파일
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2")
}
- 1부터 10까지 출력하는 코드를 2개의 쓰레드로 경쟁
- Thread1과 Thrad2의 순서는 보장되지 않고 경쟁
fun main() {
thread(start = true) {
for(i in 1..10) {
println("Thread1: 현재 숫자는 ${i}")
runBlocking {
launch {
//1초마다 딜레이 = 자원 경쟁 위해
delay(1000)
}
}
}
}
thread(start = true) {
for(i in 50..60) {
println("Thread2: 현재 숫자는 ${i}")
runBlocking {
launch {
delay(1000)
}
}
}
}
}
3) 코루틴
- 쓰레드의 작은 단위
- 1개의 쓰레드 안에 여러 개의 코루틴 사용 가능
- 쓰레드와 달리 일시 중단되거나 다시 시작할 수 있음
launch, async 빌더 많이 사용 (객체 생성 쉽게 해주는 디자인 패턴, 코루틴 실행)
- launch : 결과값이 없는 코루틴 빌더
- async : 결과값이 있는 코루틴 빌더
스코프로 범위 지정
- GlobalScope : 앱이 실행된 이후에 계속 수행
- CorountineScope : 필요할 때만 생성하고 사용 후 정리
코루틴 실행할 쓰레드를 Dispacher로 지정 가능
- Dispatchers.Main : UI와 상호 작용하기 위한 메인 쓰레드
- Dispatchers.IO : 네트워크나 디스크 I/O 작업에 최적화되어있는 쓰레드
- Dispatchers.Default : 기본적으로 CPU 최적화 되어있는 쓰레드
'기술면접' 카테고리의 다른 글
Kotlin에서 Null 처리 방법 (0) | 2024.01.19 |
---|---|
Java와 Kotlin 차이 (0) | 2024.01.19 |
예외 (1) | 2024.01.04 |
Kotlin 정적 타입 언어 (1) | 2024.01.04 |