Releases

Kotlin 1.6.20 ์ถœ์‹œ

Read this post in other languages:

๋ชฉ์ฐจ

Kotlin 1.6.20์ด ๊ณต์‹ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ์–ธ์–ด ๊ธฐ๋Šฅ์˜ ํ…Œ์ŠคํŠธ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๊ณ , ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์˜ ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉฐ, JVM, JS ๋ฐ Native ํ”Œ๋žซํผ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ๋Š” ๋‹ค์Œ ๊ฐœ์„  ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ฐœ์š”์™€ ๋”๋ถˆ์–ด ๋‹ค๋ฅธ ์ ์ง„์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ „์ฒด ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•

IntelliJ IDEA ๋˜๋Š” Android Studio๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด Kotlin ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜๋Š” ์ฆ‰์‹œ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Kotlin 1.6.20์œผ๋กœ ์—…๋ฐ์ดํŠธ

์ฃผ์š” ์—…๋ฐ์ดํŠธ

Kotlin/JVM์šฉ ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„ ํ”„๋กœํ† ํƒ€์ž…

Kotlin 1.6.20์—์„œ๋Š” ๋ฆฌ์‹œ๋ฒ„ ๊ฐœ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋กœ ์ œํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„ ์–ธ์— ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•จ์ˆ˜, ํ”„๋กœํผํ‹ฐ ๋ฐ ํด๋ž˜์Šค๋ฅผ ์ปจํ…์ŠคํŠธ ์˜์กด์ ์œผ๋กœ(ํ˜น์€ ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜) ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์„ ์–ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์„ ์–ธ๋œ ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„๊ฐ€ ํ˜ธ์ถœ์ž์˜ ๋ฒ”์œ„์—์„œ ๋ฌต์‹œ์  ๋ฆฌ์‹œ๋ฒ„๋กœ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ ์–ธ๋œ ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„๋ฅผ ๋ณธ๋ฌธ ๋ฒ”์œ„์— ๋ฌต์‹œ์ ์ธ ๋ฆฌ์‹œ๋ฒ„๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—์„œ ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด, -Xcontext-receivers ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๊ธฐ๋Šฅ ๋ฐ ๊ตฌ๋ฌธ์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ KEEP์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ตฌํ˜„์€ ํ”„๋กœํ† ํƒ€์ž…์ธ ์ ์— ์œ ์˜ํ•˜์„ธ์š”. 

  • -Xcontext-receivers๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์ „ ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 
  • ํ˜„์žฌ IDE๋Š” ์ปจํ…์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„๋ฅผ ์ตœ์†Œํ•œ์˜ ์ˆ˜์ค€์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์ •์ ์œผ๋กœ null ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ํƒ€์ž…

์ œ๋„ค๋ฆญ Java ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•  ๋•Œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด Kotlin 1.6.20์—์„œ๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ T & Any๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์—์„œ ํ™•์ •์ ์œผ๋กœ null ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ํ˜•ํƒœ๋Š” ๊ต์ฐจ ํƒ€์ž… ํ‘œ๊ธฐ์—์„œ ์˜จ ๊ฒƒ์ด๋ฉฐ ์ด์ œ &์˜ ์™ผ์ชฝ์— ์žˆ๋Š” null ๊ฐ€๋Šฅ ์ƒํ•œ์„ ๊ณผ ์˜ค๋ฅธ์ชฝ์˜ null ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ Any๋ฅผ ๊ฐ€์ง„ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์–ธ์–ด ๋ฒ„์ „์„ 1.7๋กœ ์„ค์ •ํ•˜์„ธ์š”.

KEEP์—์„œ ํ™•์ •์ ์œผ๋กœ null ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ๋” ์•Œ์•„๋ณด์„ธ์š”.

ํ˜„์žฌ ํ™•์ •์ ์œผ๋กœ null ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ํƒ€์ž…์€ ๋ฒ ํƒ€์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ์•ˆ์ •ํ™”๊ฐ€ ๋˜์—ˆ์ง€๋งŒ ์ถ”ํ›„์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

JVM IR ๋ฐฑ์—”๋“œ์—์„œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์ปดํŒŒ์ผ ์ง€์›

Kotlin 1.6.20์—์„œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ๋ณ‘๋ ฌ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ์ธ JVM IR ๋ฐฑ์—”๋“œ ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ ์ปดํŒŒ์ผ์€ ์ด ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ์ตœ๋Œ€ 15%๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

compiler option -Xbackend-threads๋กœ ์‹คํ—˜์  ๋ณ‘๋ ฌ ๋ฐฑ์—”๋“œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ์ด ์˜ต์…˜์— ๋‹ค์Œ์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • N์€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์Šค๋ ˆ๋“œ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. CPU ์ฝ”์–ด ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ์ปจํ…์ŠคํŠธ๊ฐ€ ์Šค๋ ˆ๋“œ ๊ฐ„์— ์ „ํ™˜๋˜์–ด ํšจ์œจ์ ์œผ๋กœ ๋ณ‘๋ ฌํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 0์œผ๋กœ CPU ์ฝ”์–ด๋‹น 1๊ฐœ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉ

Gradle์€ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Gradle์˜ ๊ด€์ ์—์„œ ํ”„๋กœ์ ํŠธ(ํ˜น์€ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š”ํ•œ ๋ถ€๋ถ„)๊ฐ€ ํ•˜๋‚˜์˜ ํฐ ์ž‘์—…์ผ ๋ฟ์ผ ๋•Œ๋Š” ์ด๋Ÿฌํ•œ ๋ณ‘๋ ฌํ™”๊ฐ€ ๋ณ„๋กœ ๋„์›€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ํฐ ๋ชจ๋†€๋ฆฌ์‹ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ‘๋ ฌ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ปดํŒŒ์ผํ•˜์„ธ์š”. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹ค์ˆ˜์˜ ์ž‘์€ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋นŒ๋“œ๊ฐ€ Gradle๋กœ ๋ณ‘๋ ฌํ™”๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ‘๋ ฌํ™” ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ปจํ…์ŠคํŠธ ์ „ํ™˜์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ์— ๋‚˜์œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ์ปดํŒŒ์ผ์—๋Š” ์ผ๋ถ€ ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • kapt๋Š” IR ๋ฐฑ์—”๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— kapt์™€๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์„ค๊ณ„์ƒ JVM ํž™์ด ๋” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ heap์˜ ์–‘์€ ์Šค๋ ˆ๋“œ ์ˆ˜์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.

Kotlin/JS IR ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ฆ๋ถ„ ์ปดํŒŒ์ผ ์ง€์›

IR ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์šฉํ•œ Kotlin/JS ๊ฐœ๋ฐœ์„ ๋”์šฑ ํšจ์œจํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฆ๋ถ„ ์ปดํŒŒ์ผ ๋ชจ๋“œ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“œ์—์„œ compileDevelopmentExecutableKotlinJs Gradle ์ž‘์—…์ด ์žˆ๋Š” ๊ฐœ๋ฐœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“ˆ ์ˆ˜์ค€์—์„œ ์ด์ „ ์ปดํŒŒ์ผ์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด์–ด์ง€๋Š” ์ปดํŒŒ์ผ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š” ์†Œ์Šค ํŒŒ์ผ์— ์บ์‹œ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ํŠนํžˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์„ ๋•Œ ์ปดํŒŒ์ผ ์™„๋ฃŒ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด ๊ฐœ์„  ์‚ฌํ•ญ์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—๋งŒ ์ ์šฉ๋˜๋ฉฐ(ํŽธ์ง‘-๋นŒ๋“œ-๋””๋ฒ„๊ทธ ์‚ฌ์ดํด ๋‹จ์ถ•) ํ”„๋กœ๋•์…˜ ์•„ํ‹ฐํŒฉํŠธ ๋นŒ๋“œ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ฆ๋ถ„ ์ปดํŒŒ์ผ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด, ๋‹ค์Œ ์ค„์„ ํ”„๋กœ์ ํŠธ์˜ gradle.properties์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์ƒˆ๋กœ์šด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ฆ๋ถ„ ์ปดํŒŒ์ผ์ด ์ตœ๋Œ€ 30% ๋นจ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ชจ๋“œ์—์„œ ํด๋ฆฐ ๋นŒ๋“œ๋Š” ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ค€๋น„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋Š๋ ธ์Šต๋‹ˆ๋‹ค.

Kotlin/Native ์„ฑ๋Šฅ ๊ฐœ์„ 

Kotlin 1.6.20์—๋Š” Koltin์ด ์ƒ์„ฑํ•˜๋Š” LLVM IR์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์„ฑ๋Šฅ ์—…๋ฐ์ดํŠธ์™€ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์ผ๋ถ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ํ‰๊ท  ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

  • ์‹คํ–‰ ์‹œ๊ฐ„ 15% ๊ฐ์†Œ
  • ๋ฆด๋ฆฌ์Šค ๋ฐ ๋””๋ฒ„๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ฝ”๋“œ ํฌ๊ธฐ 20% ๊ฐ์†Œ
  • ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ 26% ๊ฐ์†Œ

์ด๋ฒˆ ๋ณ€๊ฒฝ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ ๋””๋ฒ„๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ปดํŒŒ์ผ ์‹œ๊ฐ„๋„ 10% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ผ๋ถ€ ํ†ตํ•ฉ ๊ฐ์ฒด์˜ ์ •์  ์ดˆ๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ๋ชจ๋“  ํ•จ์ˆ˜์— ๋Œ€ํ•ด LLVM IR์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐœ์„ ํ•˜์˜€์œผ๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ ์บ์‹œ๋ฅผ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ„์ธต์  ๊ตฌ์กฐ ์ง€์›

Kotlin 1.6.20์—๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ ์ง€์›์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Kotlin 1.4.0์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•œ ์ดํ›„ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•˜์˜€์œผ๋ฉฐ IDE ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์•ˆ์ •ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ํŠน์ • ํ”Œ๋žซํผ์šฉ, ์ฆ‰ ํ•˜๋‚˜์˜ ๋Œ€์ƒ ํ”Œ๋žซํผ ์™ธ์— ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค ์„ธํŠธ์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” Kotlin์—์„œ ํ˜„์žฌ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๊ณต์œ ๋˜๋Š” ๊ณตํ†ต ์†Œ์Šค ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด์ œ๋Š” ๊ณตํ†ต ๋กœ์ง๊ณผ ํƒ€์‚ฌ API๋ฅผ ๋งŽ์ด ์žฌ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์œ ์‚ฌํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๋Œ€์ƒ์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์ •ํ™•ํ•œ ๋””ํดํŠธ ์ข…์†์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ณต์œ ๋œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •ํ™•ํ•œ API๋ฅผ ์ฐพ์•„์ค๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณต์žกํ•œ ๋นŒ๋“œ ์„ค์ •์ด ํ•„์š” ์—†๊ณ , ์—ฌ๋Ÿฌ ๋„ค์ดํ‹ฐ๋ธŒ ๋Œ€์ƒ์—์„œ ์ฝ”๋“œ ์„ธํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” IDE ์ง€์›์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•ด๊ฒฐ์ฑ…์„ ์‚ฌ์šฉํ•  ํ•„์š”๋„ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‹ค๋ฅธ ๋Œ€์ƒ์— ์‚ฌ์šฉํ•ด์•ผ ํ•  API๋ฅผ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์ˆ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์„ฑ์ž์—๊ฒŒ๋„ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ธต์  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ์ง€์›๋˜๋ฉด ๋Œ€์ƒ์˜ ํ•˜์œ„ ์„ธํŠธ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต API๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณ„์ธต์  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋กœ ๊ฒŒ์‹œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ์˜ ํ”„๋กœ์ ํŠธ์™€๋งŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

๊ฐœ์„ ๋œ ํ”„๋กœ์ ํŠธ ๋‚ด ์ฝ”๋“œ ๊ณต์œ 

๊ณ„์ธต์  ๊ตฌ์กฐ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉด ์ผ๋ถ€ Kotlin ๋Œ€์ƒ ๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋Š” ์žˆ์–ด๋„ ๋ชจ๋“  ๋Œ€์ƒ ๊ฐ„์— ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋Š” ๋ชจ๋“  iOS ๋Œ€์ƒ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ Foundation๊ณผ ๊ฐ™์€ iOS์šฉ ์ข…์†์„ฑ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๊ณ„์ธต์  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ์ง€์›๋˜๋ฏ€๋กœ ๋ณ„๋„ ์„ค์ • ์—†์ด ์ด๋ฅผ ๋ฐ”๋กœ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์—์„œ ์†Œ์Šค ์„ธํŠธ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์„ธํŠธ๊ฐ€ ์ปดํŒŒ์ผ๋˜๋Š” ๊ฐ ๋Œ€์ƒ์—์„œ ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ์šฉ ์–ธ์–ด ๊ธฐ๋Šฅ๊ณผ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

iOS ๊ธฐ๊ธฐ ๋ฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์šฉ์œผ๋กœ iosArm64 ๋ฐ iosX64๋ผ๋Š” 2๊ฐœ์˜ ๋Œ€์ƒ์„ ๊ฐ€์ง„ ์ผ๋ฐ˜์  ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Kotlin ๋„๊ตฌ๋Š” ๋‘ ๋Œ€์ƒ ๋ชจ๋‘ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๊ฐ„ ์†Œ์Šค ์„ธํŠธ์ธ iosMain์˜ ํ•จ์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ํˆด์ฒด์ธ์€ Kotlin/Native stdlib ํ˜น์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ์˜ฌ๋ฐ”๋ฅธ ๋””ํดํŠธ ์ข…์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Kotlin ๋„๊ตฌ๋Š” ๊ณต์œ ๋œ ์ฝ”๋“œ์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” API ์„œํ”ผ์Šค ์˜์—ญ์„ ์ •ํ™•ํžˆ ์ฐพ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Windows์— ๊ณต์œ ๋˜๋Š” ์ฝ”๋“œ์— macOS์šฉ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์‚ฌ๋ก€๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์„ฑ์ž์—๊ฒŒ ๋” ๋งŽ์€ ๊ธฐํšŒ

์ด์ œ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ฒŒ์‹œ๋˜๋ฉด, ์ค‘๊ฐ„ ์†Œ์Šค ์„ธํŠธ์˜ API๊ฐ€ ํ•จ๊ป˜ ์ ์ ˆํžˆ ๊ฒŒ์‹œ๋˜์–ด ์†Œ๋น„์ž๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Kotlin ํˆด์ฒด์ธ์ด ์†Œ๋น„์ž ์†Œ์Šค ์„ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ž๋™์œผ๋กœ ํŒŒ์•…ํ•˜๋ฉฐ, JS ์ฝ”๋“œ์—์„œ JVM์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์„ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

๊ตฌ์„ฑ ๋ฐ ์„ค์ •

Kotlin 1.6.20๋ถ€ํ„ฐ ๋ชจ๋“  ์‹ ๊ทœ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ๋Š” ๊ณ„์ธต์  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ ์ˆ˜๋™์œผ๋กœ ์ผ  ๊ฒฝ์šฐ gradle.properties์—์„œ ์ง€์› ์ค‘๋‹จ๋œ ์˜ต์…˜์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Kotlin 1.6.20์—๋Š” Android Studio 2021.1.1(Bumblebee) ํ˜น์€ ์ดํ›„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์ด ๊ธฐ๋Šฅ์„ ์„ ํƒ ํ•ด์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์ธต์  ๊ตฌ์กฐ ์ง€์›์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด, gradle.properties์—์„œ ๋‹ค์Œ์˜ ์˜ต์…˜์„ ์„ค์ •ํ•˜์„ธ์š”.

๊ฐœ์„ ์  ์ „์ฒด ๋ชฉ๋ก

์–ธ์–ด

Kotlin/JVM

Kotlin/Native

Kotlin ๋ฉ€ํ‹ฐํ”Œ๋žซํผ

Kotlin/JS

๋ณด์•ˆ

Gradle

Kotlin 1.6.20 ์„ค์น˜ ๋ฐฉ๋ฒ•

์ด๋ฏธ IntelliJ IDEA ๋˜๋Š” Android Studio๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ IDE์—์„œ ์ž๋™์œผ๋กœ Kotlin์„ 1.6.20์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์ง€์นจ์„ ๋”ฐ๋ผ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‹ค์Œ IDE์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๊ด‘๋ฒ”์œ„ํ•œ Kotlin ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • IntelliJ IDEA โ€“ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์šฉ Kotlin ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์ง€์›
  • Android Studio โ€“  Android ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ง€์›

๋˜ํ•œ kotlinx ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— Kotlin ๋ฒ„์ „ 1.6.20์„ ์ง€์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๋ช…๋ น์ค„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, Github ๋ฆด๋ฆฌ์Šค ํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”.

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

  • Slack(์ดˆ๋Œ€ ๋ฐ›๊ธฐ)์—์„œ ๋„์›€๋ง์„ ์ฐพ์•„๋ณด์„ธ์š”.
  • JetBrains ์ด์Šˆ ํŠธ๋ž˜์ปค์ธ YouTrack์— ๋ณด๊ณ ํ•ด ์ฃผ์„ธ์š”.

์ตœ์‹  Kotlin ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”! ์ด ๊ฒŒ์‹œ๋ฌผ์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์–‘์‹์„ ์ž‘์„ฑํ•˜์‹œ๋ฉด Kotlin ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์•„๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์œ ์šฉํ•œ ๊ธ€๊ณผ ์˜์ƒ

๊ฒŒ์‹œ๋ฌผ ์›๋ฌธ ์ž‘์„ฑ์ž

image description

Discover more