[kotlin] μ½”ν‹€λ¦°(Kotlin) κ³Ό 코루틴(Coroutine)에 λŒ€ν•΄

2026. 1. 17. 16:55Β·ν”„λ‘œκ·Έλž˜λ°/Android

Kotlin 

  • 2011λ…„ 7μ›” JetBrains(μΈν…”λ¦¬μ œμ΄ κ°œλ°œμ‚¬) κ°€ μΆœμ‹œν•œ μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 
  • JVM 기반 μ–Έμ–΄λ‘œ Java 와 μœ μ‚¬ν•˜μ§€λ§Œ 더 κ°„κ²°ν•œ 문법과 λ‹€μ–‘ν•œ κΈ°λŠ₯이 좔가됨. 
  • Java μ™€μ˜ μƒν˜Έ 운용 100% 지원함. 
  • JVM λ°”μ΄νŠΈ μ½”λ“œκ°€ κΈ°λ³Έμ΄μ§€λ§Œ, kotlin/native λ₯Ό μ‚¬μš©ν•˜λ©΄ jvm 없이 κΈ°κ³„μ–΄λ‘œ 컴파일이 κ°€λŠ₯함. 
  • 이λ₯Ό 톡해 μž„λ² λ””λ“œ μ‹œμŠ€ν…œ λ“± λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ kotlin 을 μ‚¬μš©ν•  수 있음. 
  • Android, spring ν”„λ ˆμž„μ›Œν¬, tomcat, java script, jakarta EE, kotlin/js λ₯Ό ν†΅ν•œ html5, iOS, 라즈베리파이 등을 κ°œλ°œν• λ•Œ μ‚¬μš©ν•  수 있음. 
  • 2017λ…„ ꡬ글이 μ•ˆλ“œλ‘œμ΄λ“œ 곡식 μ–Έμ–΄λ‘œ kotlin 좔가함. 
  • 2018λ…„ μΉ΄μΉ΄μ˜€κ°€ μΉ΄μΉ΄μ˜€ν†‘ λ©”μ‹œμ§• μ„œλ²„μ— kotlin μ‚¬μš© ν›„ μ½”λ“œμ–‘ 쀄고 생산성 λŒ€ν­ ν–₯μƒλ˜μ—ˆλ‹€λŠ” 사둀가 있음. 
  • 2019λ…„ 1μ›”λΆ€ν„° ꡬ글은 λ‚΄λΆ€ μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈμ— kotlin 을 μš°μ„  μ–Έμ–΄λ‘œ μ‚¬μš©ν•˜κ³  있으며 κΈ°μ‘΄ java ν”„λ‘œμ νŠΈλ„ μœ μ§€μ€‘. 
  • μ•ˆλ“œλ‘œμ΄λ“œ 곡식 λ¬Έμ„œ μƒ˜ν”Œ μ½”λ“œλ„ kotlin λ¨Όμ € λ‚˜μ˜΄. 

 

Java 와 λΉ„κ΅ν–ˆμ„ λ•Œ 코틀린이 νŽΈν•œ 점 

1. μ½”λ“œμ˜ 간결함 

  • μ„Έλ―Έμ½œλ‘  (;) 을 일일이 찍을 ν•„μš” μ—†μŒ 
  • property : μžλ°”μ²˜λŸΌ getter/setter λ₯Ό 길게 λ§Œλ“€μ§€ μ•Šκ³  λ³€μˆ˜ μ„ μ–Έλ§ŒμœΌλ‘œ λ‚΄λΆ€μ μœΌλ‘œ 처리 함. 
  • data class: data class User (val name: String) ν•œμ€„μ΄λ©΄ equals(), hasCode(), toString(), copy() κ°€ μžλ™μœΌλ‘œ 생김. 
  • top level function : 클래슀 없이 파일 μ–΄λ””μ„œλ“  ν•¨μˆ˜ λ§Œλ“€ 수 있음. 

2. Null safety 

  • null 체크 μ˜λ¬΄ν™” : λ³€μˆ˜ μ„ μ–Έμ‹œ ? (nullable) λ₯Ό λΆ™μ—¬μ•Όλ§Œ null 을 넣을 수 있음. 컴파일 λ‹¨κ³„μ—μ„œ  NullPointerException(NPE)을 미리 μž‘μ•„μ€Œ. 
  • is둜 νƒ€μž…μ„ ν™•μΈν•˜λ©΄, κ·Έλ‹€μŒ μ€„λΆ€ν„°λŠ” μ•Œμ•„μ„œ κ·Έ νƒ€μž…μœΌλ‘œ μΊμŠ€νŒ…ν•¨. 일일이 ν˜• λ³€ν™˜((String) obj)을 ν•  ν•„μš”κ°€ μ—†μŒ. 

3. μœ μ—°ν•˜κ³  κ°•λ ₯ν•œ ν•¨μˆ˜ 

  • ν™•μž₯ν•¨μˆ˜(extension) : 남이 λ§Œλ“  클래슀(μžλ°” ν‘œμ€€ 라이브러리) 에도 λ‚΄κ°€ μ›ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•΄μ„œ μ“Έ 수 있음. 
  • infix ν•¨μˆ˜: 2 power 4 처럼 ν•¨μˆ˜λ₯Ό μ—°μ‚°μžμ²˜λŸΌ μžμ—°μŠ€λŸ½κ²Œ μ“Έ 수 있음. 
  • μ—°μ‚°μž μ˜€λ²„λ‘œλ”© : ==κ°€ λ‚΄λΆ€μ μœΌλ‘œ equals() λ₯Ό ν˜ΈμΆœν•¨. λ¬Έμžμ—΄ λΉ„κ΅μ‹œ == 만 쓰면됨.

4. ν˜„λŒ€μ μΈ μ œμ–΄λ¬Έ when 

  • switch 보닀 κ°•λ ₯함. λ²”μœ„(in), νƒ€μž…(in) λ“± λ‹€μ–‘ν•œ 쑰건을 넣을 수 있고, κ²°κ³Όλ₯Ό λ°”λ‘œ λ³€μˆ˜μ— λ‹΄μ•„ ν‘œν˜„μ‹λ„ μ“Έ 수 있음. 
  • Range: 1..10 or 1 unit 10 처럼 λ²”μœ„λ₯Ό μ§κ΄€μ μœΌλ‘œ ν‘œν˜„ κ°€λŠ₯

5. JVM κΈ°λ°˜μ΄λΌμ„œ κ°–λŠ” ꡬ쑰적 νŠΉμ§• 

  • μ½”ν‹€λ¦°μ˜ 클래슀/λ©”μ„œλ“œλŠ” 기본적으둜 상속 λΆˆκ°€μž„(final) -> 상속 ν—ˆμš©ν•˜λ €λ©΄ open 을 뢙여야함. 
  • companion object: μžλ°”μ˜ static λŒ€μ‹  μ‚¬μš©ν•˜λ©°, 훨씬 객체지ν–₯적으둜 μƒμ†μ΄λ‚˜ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ κ°€λŠ₯함. 
  • checked exception λ¬΄μ‹œ: μžλ°”μ²˜λŸΌ try-catch λ₯Ό κ°•μ œλ‘œ μ“°μ§€ μ•Šμ•„λ„λ¨. μ½”λ“œκ°€ 훨씬 깔끔해짐. 

 

μ½”ν‹€λ¦° 단점 

  • 컴파일 속도가 μžλ°”λ³΄λ‹€ λŠλ¦¬λ‹€ : μ»΄νŒŒμΌλŸ¬κ°€ ν•˜λŠ” 일이 λ§Žμ•„μ§. (μ½”λ“œμ˜ null μ•ˆμ •μ„± 체크, 슀마트 캐슀트 계산 λ“±λ“±) 
  • ν•™μŠ΅ 곑선이 생각보닀 λ†’μŒ : μžλ°”μ˜ 고질적인 문제λ₯Ό ν•΄κ²°ν•˜κ³ μž λ„μž…ν•œ κΈ°λŠ₯이 λ§Žμ•„μ„œ μ½”λ”© μŠ€νƒ€μΌμ„ λ§žμΆ”μ§€ μ•ŠμœΌλ©΄ ν˜‘μ—…μ‹œ μ½”λ“œ 가독성 λ–¨μ–΄μ§ˆ 수 있음. 
  • λŸ°νƒ€μž„ 라이브러리 크기 증가: μ½”ν‹€λ¦° 자체 ν‘œμ€€ 라이브러리 (kotlin-stdlib) λ₯Ό 포함해야함 
  • μžλ°”μ™€μ˜ ν˜Έν™˜μ„±? : 100% ν˜Έν™˜λœλ‹€κ³  ν•˜μ§€λ§Œ, null μ•ˆμ •μ„±λ¬Έμ œ/static μ ‘κ·Ό 문제 등등이 생길 수 있음. 

 

코루틴(Coroutine)μ΄λž€? 

  • Co(ν•¨κ»˜, ν˜‘λ ₯) + Routine(ν•¨μˆ˜, μž‘μ—… λ‹¨μœ„) 의 ν•©μ„±μ–΄. 
  • 1960λ…„λŒ€μ— 멜빈 μ½˜μ›¨μ΄μ— μ˜ν•΄ 처음 μ†Œκ°œλ˜μ—ˆμŒ. 
  • 즉, μ—¬λŸ¬κ°œμ˜ 루틴이 μ„œλ‘œ μ–‘λ³΄ν•˜λ©° ν˜‘λ ₯(cooperative)적으둜 싀행을 μ œμ–΄ν•˜λŠ” "ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄"을 의미. 
  • 비동기 ν”„λ‘œκ·Έλž˜λ°κ³Ό λ™μ‹œμ„±(concurrency) 처리λ₯Ό μœ„ν•œ ν”„λ‘œκ·Έλž˜λ° ꡬ쑰둜 보톡 ν•¨μˆ˜(subroutine) λŠ” ν•œλ²ˆ μ‹€ν–‰λ˜λ©΄ λλ‚ λ•ŒκΉŒμ§€ λ©ˆμΆ”μ§€ μ•Šμ§€λ§Œ, 코루틴은 μ‹€ν–‰ 쀑간에 λ©ˆμ·„λ‹€κ°€(suspend), λ‚˜μ€‘μ— λ‹€μ‹œ μ‹œμž‘(resume) ν•  수 있음. 

코루틴 νŠΉμ§• 

  1. 쀑단과 재개 : 코루틴은 μ‹€ν–‰ 쀑간에 νŠΉμ • ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 싀행을 μ€‘λ‹¨ν•˜κ³ , μƒνƒœλ₯Ό μ €μž₯ν•œ λ’€ λ‚˜μ€‘μ— λ‹€μ‹œ μ‹€ν–‰ 재개 κ°€λŠ₯ 
  2. λΉ„λ™κΈ°μ²˜λ¦¬: μž…μΆœλ ₯(i/o) μž‘μ—…μ΄λ‚˜ κΈ΄ μ‹€ν–‰ μ‹œκ°„μ„ μš”κ΅¬ν•˜λŠ” μž‘μ—…μ—μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜λ©°, λ™μ‹œμ„±μ„ 지원함. 
  3. 가벼움: 코루틴은 os μŠ€λ ˆλ“œμ™€ 달리 κ°€λ²Όμš΄ λ‹¨μœ„λ‘œ λ™μž‘ν•˜λ©° ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ λ‹€μˆ˜μ˜ 코루틴을 μ‹€ν–‰ν•  수 있음. 
  4. μƒνƒœ μœ μ§€: 코루틴은 μ€‘λ‹¨λœ μ‹œμ μ—μ„œ μƒνƒœ(λ³€μˆ˜, 호좜 μŠ€νƒ) λ₯Ό μœ μ§€ν•˜λ©°, 재개 μ‹œ 이전 μƒνƒœλ₯Ό λ³΅μ›ν•˜μ—¬ 싀행을 이어감. 

 

μ€‘μš” ν‚€μ›Œλ“œ : suspend, resume 

1. suspend (μΌμ‹œ 쀑단) 

  • 비차단(non-blocking) : 코루틴이 λ„€νŠΈμ›Œν¬ μš”μ²­ 같은 무거운 μž‘μ—…μ„ λ§Œλ‚¬μ„λ•Œ μŠ€λ ˆλ“œλ₯Ό 꽉 작고 κΈ°λ‹€λ¦¬λŠ”κ²Œ μ•„λ‹ˆλΌ, "잠깐 λ©ˆμΆœν…Œλ‹ˆ, κ·Έλ™μ•ˆ λ‹€λ₯Έ μŠ€λ ˆλ“œλŠ” λ‹€λ₯Έ 일해" 라고 μ–‘λ³΄ν•˜λŠ” 것. 
  • 덕뢄에 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ 수천, 수만개의 코루틴이 λ™μ‹œμ— λŒμ•„κ°ˆ 수 있음. 

2. resume (재개) 

  • 볡귀 지점 κΈ°μ–΅ : suspend 둜 μž‘μ—…μ„ λ©ˆμ·„μ„λ•Œ, 코루틴은 κ·Έλƒ₯ μ‚¬λΌμ§€λŠ” 것이 μ•„λ‹ˆλΌ μ–΄λ””κΉŒμ§€ ν–ˆλŠ”μ§€ μ €μž₯함. 
  • μž‘μ—… μ™„λ£Œ ν›„ 볡귀: λ„€νŠΈμ›Œν¬ μš”μ²­μ΄λ‚˜ db μž‘μ—…μ΄ λλ‚˜λ©΄ λ©ˆμ·„λ˜ μ§€μ μœΌλ‘œ λ‹€μ‹œ λŒμ•„μ™€μ„œ μž‘μ—… μ‹€ν–‰
  • μŠ€λ ˆλ“œ 볡귀 : μ΄λ•Œ μž¬κ°œλ˜λŠ” μŠ€λ ˆλ“œλŠ” 처음 μ‹œμž‘ν–ˆλ˜ μŠ€λ ˆλ“œμ™€ 같을 수 있고 λ‹€λ₯Ό 수 있음. 

3. continuation (연속성) 

  • suspend 와 resume 을 μ΄μ–΄μ€Œ. 
  • μ½”ν‹€λ¦° μ»΄νŒŒμΌλŸ¬λŠ” suspend λ₯Ό λ§Œλ‚˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ λ‚˜λ¨Έμ§€ μž‘μ—… λ‚΄μš©μ— λŒ€ν•œ 기둝을 μƒˆκΉ€. 
  • μž‘μ—…μ΄ λλ‚˜λ©΄ resume ν•˜κΈ° μœ„ν•¨. 

4. structured concurrency (κ΅¬μ‘°ν™”λœ λ™μ‹œμ„±) 

  • 생λͺ… μ£ΌκΈ° 관리 = CoroutineScope μ΄λΌλŠ” μšΈνƒ€λ¦¬λ₯Ό 제곡 
  • λ§Œμ•½ λΆ€λͺ¨ μž‘μ—…μ΄ μ·¨μ†Œλ˜λ©΄ κ·Έ μ•ˆμ—μ„œ λŒμ•„κ°€λ˜ 수만개의 μžμ‹ 코루틴도 ν•œκΊΌλ²ˆμ— μ•ˆμ „ν•˜κ²Œ μ’…λ£Œλ¨. 

 

μŠ€λ ˆλ“œ(thread) vs 코루틴(coroutine) 

ꡬ뢄 μŠ€λ ˆλ“œ (Thread) 코루틴 (Coroutine)
관리 주체 OS (컀널) μ‚¬μš©μž (μ½”λ“œ/라이브러리)
λ©”λͺ¨λ¦¬ 각 μŠ€λ ˆλ“œλ§ˆλ‹€ μ•½ 1MB ν• λ‹Ή (λΉ„μŒˆ) 객체 ν•˜λ‚˜ μ •λ„μ˜ μ•„μ£Ό 적은 μš©λŸ‰ (맀우 가벼움)
μ „ν™˜ 방식 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ (무거운 μž‘μ—…) μΌμ‹œ 쀑단 및 재개 (κ°€λ²Όμš΄ μž‘μ—…)

 

 

 

좜처 

https://developer.android.com/kotlin/learn?hl=ko

 

Kotlin ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ•Œμ•„λ³΄κΈ°  |  Android Developers

Kotlin ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ•Œμ•„λ³΄κΈ° μ»¬λ ‰μ…˜μ„ μ‚¬μš©ν•΄ μ •λ¦¬ν•˜κΈ° λ‚΄ ν™˜κ²½μ„€μ •μ„ κΈ°μ€€μœΌλ‘œ μ½˜ν…μΈ λ₯Ό μ €μž₯ν•˜κ³  λΆ„λ₯˜ν•˜μ„Έμš”. Kotlin은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μž…λ‹ˆλ‹€. μ „ μ„Έκ³„μ—μ„œ Android κ°œλ°œμžκ°€ 널리 μ‚¬μš©ν•©λ‹ˆ

developer.android.com

 

https://kotlinlang.org/

 

Kotlin Programming Language

Kotlin is a concise and multiplatform programming language by JetBrains. Enjoy coding and build server-side, mobile, web, and desktop applications efficiently.

kotlinlang.org

 

https://namu.wiki/w/Kotlin

 

Kotlin

2016λ…„ 2월에 정식 μΆœμ‹œλœ IntelliJ IDEA 둜 유λͺ…ν•œ JetBrains κ°€ κ°œλ°œν•œ μ˜€ν”ˆ μ†ŒμŠ€

namu.wiki

 

'ν”„λ‘œκ·Έλž˜λ° > Android' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[kotlin] sealed class (enum class μ™€μ˜ 차이점)  (0) 2026.01.17
[260114] Android Jetpack Compose의 3단계 μ‹€ν–‰ νŒŒμ΄ν”„λΌμΈ(μ»΄ν¬μ§€μ…˜, λ ˆμ΄μ•„μ›ƒ, 그리기)  (0) 2026.01.14
[260112] Android Context λž€?  (0) 2026.01.12
[240808][μ•ˆλ“œλ‘œμ΄λ“œ μžλ°”] μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈ λΉŒλ“œ 및 μ‹€ν–‰ κ³Όμ •  (0) 2024.08.08
[Android/JAVA] "μ˜μ‹¬μŠ€λŸ¬μš΄ λ“€μ—¬μ“°κΈ°" 이슈 . . . Suspicious indentation 였λ₯˜. μž‘λ™μ—λŠ” 문제 μ—†μŒ  (2) 2024.02.09
'ν”„λ‘œκ·Έλž˜λ°/Android' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [kotlin] sealed class (enum class μ™€μ˜ 차이점)
  • [260114] Android Jetpack Compose의 3단계 μ‹€ν–‰ νŒŒμ΄ν”„λΌμΈ(μ»΄ν¬μ§€μ…˜, λ ˆμ΄μ•„μ›ƒ, 그리기)
  • [260112] Android Context λž€?
  • [240808][μ•ˆλ“œλ‘œμ΄λ“œ μžλ°”] μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈ λΉŒλ“œ 및 μ‹€ν–‰ κ³Όμ •
jennnnna
jennnnna
  • jennnnna
    πŸ’»πŸ€Jennna's BLOG
    jennnnna
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (74) N
      • 컴퓨터 (1)
        • Operating system 운영체제 (8)
      • ν”„λ‘œκ·Έλž˜λ° (5)
        • JAVA (6)
        • PHP (1)
        • Android (7)
        • Apache (1)
        • Python (0)
      • 곡뢀 (15)
        • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝 (12)
        • TIL (3)
      • AI (2) N
      • TTS (1)
      • LLM (2)
      • RAG (1)
      • μ–΄ν•™ (5)
        • English (5)
        • Japanese (ζ—₯本θͺž) (0)
      • κΈ€μ“°κΈ° (5)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    운영체제
    cs곡뢀
    μžλ°”κΈ°μ΄ˆ
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬
    μžλ°”κ³΅μ‹λ¬Έμ„œ
    λΉ„μ „κ³΅μžκ°œλ°œμž
    λ¬΅μ€μ§€μ°ΈμΉ˜κΉ€λ°₯
    μΉ΄νŽ˜μ•Œλ°”
    μžλ°”λ…ν•™
    μ •μ²˜κΈ°
    μžλ°”κ³΅λΆ€
    μž₯μΈν•œκ³Ό
    μ•ˆλ“œλ‘œμ΄λ“œκ°œλ°œ
    μ•ˆλ“œλ‘œμ΄λ“œ
    λΉ„μ „κ³΅μžcs곡뢀
    μ˜€λΈ”μ™„
    μš΄μ˜μ²΄μ œκ³΅λΆ€
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ν•„κΈ°
    CS지식
    ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.5
jennnnna
[kotlin] μ½”ν‹€λ¦°(Kotlin) κ³Ό 코루틴(Coroutine)에 λŒ€ν•΄
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”