본문 바로가기

기술면접

비동기 프로그래밍

비동기 프로그래밍이란 코드가 다 완료되지 않아도 다음 코드 라인을 실행할 수 있는 프로그래밍입니다. 동기 프로그래밍에 비해 성능 향상과 자원이 최적화되며 유연성과 확장성을 가지고 있어 복잡한 작업을 효율적으로 처리할 수 있게 해줍니다.

 

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