✅ 코루틴이 뭐지?
: 코틀린에서 제공하는 비동기 프로그래밍을 위한 경량 스레드임.
API를 1000번 호출하는 상황을 가정하고 Java와 Kotlin에서 각각 구현했을 때 성능을 비교해본다.
Java에서는 ExecutorService
를 사용하여 멀티스레딩을 구현하고, Kotlin에서는 Coroutine
을 사용하여 비동기적으로 실행한다.
import java.util.concurrent.*;
public class JavaApiRequest {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(100);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
executor.execute(() -> {
try {
Thread.sleep(500); // API 요청을 시뮬레이션
System.out.println("API 요청 완료 (Thread: " + Thread.currentThread().getName() + ")");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
executor.awaitTermination(10, TimeUnit.SECONDS);
long endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");
}
}
Thread.sleep(500)
을 사용하여 스레드가 불필요하게 블로킹된다.import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis
fun main() = runBlocking {
val time = measureTimeMillis {
val jobs = List(1000) {
launch(Dispatchers.IO) {
delay(500L) // API 요청을 시뮬레이션
println("API 요청 완료 (Coroutine: ${Thread.currentThread().name})")
}
}
jobs.forEach { it.join() }
}
println("Total execution time: ${time}ms")
}
delay(500L)
을 사용하여 스레드를 차단하지 않고 효율적으로 실행한다.Java (Thread 사용) | Kotlin (Coroutine 사용) | |
---|---|---|
실행 방식 | ExecutorService 를 사용하여 스레드 풀 생성 | launch 를 사용하여 경량 코루틴 실행 |
동시 실행 가능 개수 | 제한적 (스레드 풀 크기에 따라 결정) | 무제한 (스레드보다 가벼움) |
컨텍스트 스위칭 비용 | 높음 (스레드 간 전환 비용 발생) | 낮음 (코루틴 컨텍스트 전환 최적화) |
메모리 사용량 | 높음 (스레드당 메모리 할당 필요) | 낮음 (코루틴은 스택 메모리를 적게 사용) |
지연 작업 | Thread.sleep() 으로 인해 블로킹 발생 | delay() 를 사용하여 비동기 실행 |
처리 속도 | 약 5~10초 소요 (스레드 스케줄링 영향) | 약 1초 소요 (코루틴 최적화) |
Q. 실무에서 코틀린과 자바 혼용해서 쓰기도 하나?
A. 일부 기업에서는 혼용 가능
멘토님 회사의 경우도 스칼라→ 코틀린으로 전환함( 코틀린이 레퍼런스가 더 많아서 )
코틀린스러운
코드인지 질문해보기!자바 & 스프링이 대세
ex. 한국에서는 코볼(COBOL)거의 사용 안하지만, 미국에서는 시니어 개발자 부족으로 높은 연봉으로 모셔가는 사례가 생김
ex. 멘토님의 경우, 게임 관련 앱을 개발해 6개월간 광고 수익 450만 원 달성 경험O
→ 애드센스 적극 활용하길 추천!