์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ์๊ฐ[ํธ์ง]
IntelliJ IDEA์ ๊ฐ๋ฐ์ฌ JetBrains์์ 2011๋
์ ๊ณต๊ฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด. Java์ ๋นํด ์๋นํ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ธ๋ฏธ์ฝ๋ก ์ ์ต์
์ด๋ค. JVM ๊ธฐ๋ฐ์ ์ธ์ด์ด๋ฉฐ, Java์์ ์ํธ ์ด์ฉ์ด 100% ์ง์๋๋ค. JVM ๋ฐ์ดํธ์ฝ๋๊ฐ ๊ธฐ๋ณธ์ด์ง๋ง, Kotlin/Native ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด๋ก ์ต์ข
์ปดํ์ผ์ด ๊ฐ๋ฅํ๋ค. ์๋๋ก์ด๋, ์คํ๋ง ํ๋ ์์ํฌ, ํฐ์บฃ[3], JavaScript, Java EE, HTML5, iOS, ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด ๋ฑ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ ์ ์๋ค.
ํ์ฌ ์ต์ ๋ฒ์ ์ 1.4.20.
2017๋ ์ ๊ตฌ๊ธ์ด ์๋๋ก์ด๋์ ๊ณต์ ์ธ์ด๋ก Kotlin์ ์ถ๊ฐํ์๋ค. ์ด๋ ์ค๋ผํด๊ณผ์ Java API ์ ์๊ถ ๋ถ์์ ์ฌํ๋ก ๋ณด๋ ์๊ฐ์ด ๋ง๋ค. 2018๋ ์นด์นด์ค๊ฐ ์นด์นด์คํก ๋ฉ์์ง ์๋ฒ์ Kotlin์ ์ฌ์ฉํด ๋ณธ ๊ฒฐ๊ณผ, ์ฝ๋๋์ด ๋น์ฝ์ ์ผ๋ก ๊ฐ์ํ๊ณ ์์ฐ์ฑ์ด ๋ํญ ํฅ์๋์๋ค๊ณ ํ๋ค. # 2019๋ 1์๋ถํฐ๋ ๊ตฌ๊ธ ๋ด๋ถ์ ์๋๋ก์ด๋ ํ๋ก์ ํธ์์๋ Java ๋์ Kotlin์ ์ฌ์ฉํ๋ค. # ์๋๋ก์ด๋ ๊ณต์ ๋ฌธ์์ ์ํ ์ฝ๋๋ Java๋ณด๋ค Kotlin์ผ๋ก ์์ฑ๋ ์์ ๊ฐ ๋จผ์ ๋์จ๋ค. ์์
์ด๋ฆ์ JetBrains์ R&D ์ผํฐ๊ฐ ์์นํ ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ ๊ทผ์ฒ์ ์ฝํ๋ฆฐ(ะะพฬัะปะธะฝ) ์ฌ์์ ๋ฐ์๋ค. Andrey Breslav(ะะฝะดัะตะน ะัะตัะปะฐะฒ)์ ๋ฐํ ์ฐธ๊ณ Java๊ฐ ์ธ๋๋ค์์์ ์ฌ์ด๋ผ๋ ๊ฒ์ ์๊ฐํด๋ณด๋ฉด ๋ค๋ถํ Java๋ฅผ ์์ํ ๋ฏํ ์ด๋ฆ.
ํ์ฌ ์ต์ ๋ฒ์ ์ 1.4.20.
2017๋ ์ ๊ตฌ๊ธ์ด ์๋๋ก์ด๋์ ๊ณต์ ์ธ์ด๋ก Kotlin์ ์ถ๊ฐํ์๋ค. ์ด๋ ์ค๋ผํด๊ณผ์ Java API ์ ์๊ถ ๋ถ์์ ์ฌํ๋ก ๋ณด๋ ์๊ฐ์ด ๋ง๋ค. 2018๋ ์นด์นด์ค๊ฐ ์นด์นด์คํก ๋ฉ์์ง ์๋ฒ์ Kotlin์ ์ฌ์ฉํด ๋ณธ ๊ฒฐ๊ณผ, ์ฝ๋๋์ด ๋น์ฝ์ ์ผ๋ก ๊ฐ์ํ๊ณ ์์ฐ์ฑ์ด ๋ํญ ํฅ์๋์๋ค๊ณ ํ๋ค. # 2019๋ 1์๋ถํฐ๋ ๊ตฌ๊ธ ๋ด๋ถ์ ์๋๋ก์ด๋ ํ๋ก์ ํธ์์๋ Java ๋์ Kotlin์ ์ฌ์ฉํ๋ค. # ์๋๋ก์ด๋ ๊ณต์ ๋ฌธ์์ ์ํ ์ฝ๋๋ Java๋ณด๋ค Kotlin์ผ๋ก ์์ฑ๋ ์์ ๊ฐ ๋จผ์ ๋์จ๋ค. ์์
์ด๋ฆ์ JetBrains์ R&D ์ผํฐ๊ฐ ์์นํ ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ ๊ทผ์ฒ์ ์ฝํ๋ฆฐ(ะะพฬัะปะธะฝ) ์ฌ์์ ๋ฐ์๋ค. Andrey Breslav(ะะฝะดัะตะน ะัะตัะปะฐะฒ)์ ๋ฐํ ์ฐธ๊ณ Java๊ฐ ์ธ๋๋ค์์์ ์ฌ์ด๋ผ๋ ๊ฒ์ ์๊ฐํด๋ณด๋ฉด ๋ค๋ถํ Java๋ฅผ ์์ํ ๋ฏํ ์ด๋ฆ.
2. ๋ฌธ๋ฒ[ํธ์ง]
3. ํน์ง[ํธ์ง]
- ์ฅํฉํ๋ Java์ ๋น๊ตํ๋ฉด ๋๋ฌผ๋ ์ ๋๋ก ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค. ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ฉด์๋ ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์๋ค.
- ์ค๋ฒํค๋ ์๋ ๋ ์์ ์ฑ์ ์ ๊ณตํ๋ค. Kotlin์ ๋ณ์๋ Nullable(๋ ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ)๊ณผ NotNull(๋ ๊ฐ ์ฌ์ฉ ๋ถ๊ฐ)๋ก ๋๋๋๋ฐ, ๋ณ์ ์ ์ธ ์ '?'๋ฅผ ๋ถ์ฌ Nullable๋ก ๋ง๋ค ์ ์๋ค. Swift์์๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ฐ๋๋ฐ Kotlin ์ชฝ์ด ์ ์ฝ์ด ์ข ๋ํด์ ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
- ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๋๋ค. JSONObject๋ฅผ ๋ง๋ค ๋ ๋๋ฌผ์ด ๋๋ค...
- ๋ชจ๋ ํจ์๊ฐ ๋ฆฌํด๊ฐ์ ๊ฐ์ง๋ค.
- Java์ 'Integer'๋ 'Double'์ฒ๋ผ primitive type์ ์ํ ๋ณ๋์ wrapper class๊ฐ ์กด์ฌํ์ง ์๋๋ค. ๋ชจ๋ primitive type์ ๊ฐ์ฒด ์ทจ๊ธ์ ๋ฐ๋๋ค. ๋ฐ๋ผ์ Int ๊ฐ์ ๋ณ์๋ ๊ฐ์ฒด์ ํ ๋น๋ toString ํจ์ ๋ฑ์ ๋ฐ๋ก๋ฐ๋ก ์ด์ฉํ ์ ์๋ค.
- ํ์ฅํจ์, ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ๋ค.
์๋ฅผ ๋ค์ด intํ์ ํ์ฅํด 'i = 3 power 4' ๊ฐ์ ์์ผ๋ก ์ ์ฐ์ฐ์๋ฅผ ๋ง๋ค ์ ์๋ค.[4] - API ๋ฌธ์์ Java์ HTML ๋์ Markdown์ ์ฌ์ฉํ๋ค.
- == ์ฐ์ฐ์๊ฐ ์๊ฐํ๋ ๋๋ก ์๋ํ๋ค.
Java์์๋ String i์ String j๊ฐ ๊ฐ์ ๋ฌธ์์ด์ ๋ด๊ณ ์์ด๋ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก i == j๋ false๊ฐ ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ฐ๋ ํจ์๊ฐ equals()์ธ๋ฐ, Kotlin์์ ==๋ equals()์ ๋๊ฐ์ด, ์ฆ content equality๋ก ์๋ํ๋ค. ๋ฐ๋ผ์ i == j๋ true๋ค. Java์ฒ๋ผ identity equality๋ฅผ ๋น๊ตํ๋ ค๋ฉด ===๋ฅผ ์ฐ๋ฉด ๋๋ค. !=๋ฅผ ์ฐ๋ ค๋ฉด !==๋ฅผ ์ฐ์. - static ๋ฉ์๋๊ฐ ์๋ค. companion object๋ฅผ ์ฌ์ฉํด ๊ฐ์ธ์ผ ํ๋ค. Java ์ฝ๋์์ ์ ๊ทผํ๋ ค๋ฉด 'ํด๋์ค๋ช .Companion.๋ฉ์๋_ํน์_get๋ณ์๋ช ()' ๋๋ @JvmStatic annotation์ ์ฐ๋ฉด ๋๋ค.
- Java 6์ ํธํ๋๋ค.[5]
- Java์์ ์ํธ ์ด์ฉ์ด 100% ์ง์๋๋ค.[6]
3.1. ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ[ํธ์ง]
- getter์ setter๋ฅผ ๋ฐฐ์ ํ๋ค. ๊ทธ๋ฅ ์ฐ์ง ๋ง๋ผ๊ณ IntelIiJ์ ์ฝ๋ ์ ๋๋ ์ดํธ(Alt+Insert)์์ ๋นผ๋ฒ๋ ธ๋ค. ๋ฌผ๋ก ์ฐ๋ ค๋ฉด ๋น์ฐํ ์ธ ์ ์๋๋ฐ, ๊ตฌ๊ธ์ Java์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฉด์์ ์ ๋์ ์ฐ์ง ๋ง๊ณ ๊ทธ๋ฅ ๋ณ์๋ฅผ public์ผ๋ก ํ๋ผ๊ณ ๊ถ์ฅํด ์๋ค.[7]
- ํด๋์ค์ getters, setters, equals(), hashCode(), toString()๊ณผ copy()๋ฅผ ํ ์ค๋ก ์ ์ธํ ์ ์๋ค! ๋ณ์(var) ๋ฐ ์์(val)๋ก ์ง์ ๋ ์์ฑ์ ํจ๋ฌ๋ฏธํฐ๋ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์/์์๋ก ๋์ํ๋ค.
data class Customer(var name: String, var email: String, var company: String)
- ๋๋ค ์์ ์ง์ํ๋ค.
- ์ฑ๊ธํค ๋ฐฉ์์ ๊ฐ์ฒด๋ฅผ object๋ก ๋ง๋ค ์ ์๋ค.
object ThisIsASingleton {
val companyName: String = "JetBrains"
}
- in๊ณผ Range๋ฌธ์ด ์๋ค.
if (i in 1..10) { // equivalent of 1 <= i && i <= 10 println(i) }
- for๋ฌธ์๋ ์ธ ์ ์๋ค!
for (i in 0..12 step 3) print("$i ") // 0 3 6 9 12 ์ถ๋ ฅ for (i in 12 downTo 0 step 2) print("$i ") // 12 10 8 6 4 2 0 ์ถ๋ ฅ
- switch/case๊ฐ when ->์ผ๋ก ๋์ฒด๋์๋ค. ์์ in๊ณผ Range๋ ์ธ ์ ์๋ค.
when (x) { 0, 1 -> print("boolean") 2 -> print("์ฝฉ\n์ฝฉ") !in 1..9 step 2 -> print("ํ์ ์๋") in 0..9 -> print("ํ์๋ฆฟ์") else -> print("otherwise") }
- is ์ฐ์ฐ์๊ฐ ์๋ค. ํ์ ์ฒดํฌ, ์๋ ํ๋ณํ ๋ฑ์ด ๊ฐ๋ฅํ๋ค.
npcContainer.forEach { npc ->
if (npc is Visible) npc.drawBody(gc, g) // npc๊ฐ Visibleํ์ผ๋ก ์๋ ๋ณํ๋์๋ค.
if (npc is Glowing) npc.drawGlow(gc, g) // npc๊ฐ Glowingํ์ผ๋ก ์๋ ๋ณํ๋์๋ค.
}
- when๋ฌธ์๋ ์ธ ์ ์๋ค.
when (expr) { is Num -> expr.value // expr์ด Numํ์ผ๋ก ์๋ ๋ณํ๋์๋ค. is Sum -> eval(expr.left) + eval(expr.right) // expr์ด Sumํ์ผ๋ก ์๋ ๋ณํ๋์๋ค. else -> throw IllegalArgumentException("ํค์์ฃ") }
- if๋ฌธ์ด ํํ์์ผ๋ก ๋์ํ๋ค.
val max = if (a > b) { print("Choose a") a } else { print("Choose b") b }
3.2. ์์ ์ฑ[ํธ์ง]
- Null ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๋ฅผ ์์์ ๋ณดํธํด์ค๋ค. Java์์ ๊ฐ์ ธ์จ ํด๋์ค ๋ฑ๋ ๊ฐ๋ฅํ๋ค.
- ๋ณ์๋ช ?๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ณ์ ์์ ๋ฉ์๋๋ ๋ณ์ (ex. length)๋ฅผ ๋ถ๋ฌ์ฌ๋ ๋ณ์๊ฐ null์ด๋ฉด null์ ๋ฐํํ๋ค. ๋ฐํ์ NullPointerException์ ๊ณ ํต์ ๋์ด์ฃผ๋ ๊ณ ๋ง์ด ๊ธฐ๋ฅ์ด๋ค.
return b?.length //b๊ฐ null์ด๋ฉด null ๋ฆฌํด
- ์ค๋ฅ ๋ฐฉ์ง๋ก null-safe ์ฐ์ฐ์๋ฅผ ์ธ ์ ์๋ค. (ex. s as String?)
- ์์ ํ ํ๋ณํ ํค์๋์ธ as? ๊ฐ ์กด์ฌํ๋ค. (ex. s as? String)
/* null์ด๊ฑฐ๋ null์ ์๋์ง๋ง ๋์ ํ์ ์ผ๋ก ํ๋ณํ๋ ์ ์๋ ๊ฒฝ์ฐ์ ๊ฐ์ ํ๋ณํ์ด ์คํจํ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ์์ ํ๊ฒ null์ ๋ฐํํด์ค๋ค. */ null as? String // null "string" as? File // null /* ๋ฐ๋ฉด as๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ kotlin.TypeCastException์ด๋ java.lang.ClassCastException ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค */ null as File // kotlin.TypeCastException ์์ธ ๋ฐ์ null as File? // null "string" as File // java.lang.ClassCastException ์์ธ ๋ฐ์ "string" as File? // java.lang.ClassCastException ์์ธ ๋ฐ์
3.3. ๊ทธ ์ธ[ํธ์ง]
- new ํค์๋๊ฐ ์๋ค.
- ์ธ๋ฏธ์ฝ๋ก ์ด ํ์์๋ค.[8]
- Function parameter๊ฐ immutableํ val์ด๋ค.
- System.out.println/printf ๋ฑ์ด println/printf ๋ฑ์ผ๋ก ์ค์๋ค.
- String์์ ๋ณ์์ ๊ฐ์ ์ฝ๊ฒ ํํํ ์ ์๋ interpolation($)์ ์ง์ํ๋ค.
val name: String = "Wikineet" val greet_en: String = "Hello, $name!" val greet_ko: String = "${name}๋ ์๋ ํ์ธ์!" println(greet_en) // ์ถ๋ ฅ: Hello, Wikineet! println(greet_ko) // ์ถ๋ ฅ: Wikineet๋ ์๋ ํ์ธ์!
- Nullable์ด ์๋ ๋ณ์์์ null ์ฌ์ฉ์ ์ค๋ฅ๋ฅผ ๋ฑ์ด๋ธ๋ค.
var a: String = "abc" a = null // ์ปดํ์ผ ์๋ฌ
- ?์ ์ฌ์ฉํด Nullable๋ก ๋ง๋ค์ด์ฃผ๋ฉด ์ธ ์ ์๋ค.
var b: String? = "abc" b = null // ok
- Elvis ์ฐ์ฐ์(?:)๊ฐ ์กด์ฌํ๋ค.
val testee_hometown: String? = null // ์ฌ๊ธฐ์ ์ ์ ํ ๊ฐ์ ๋ฃ์ผ๋ฉด '<ํผ์คํ์ ๊ณ ํฅ ์ง๋ช >' ๋์ ๋ฃ์ ๊ฐ์ด ํ์๋๋ค. val hometown_display = testee_hometown ?: "<ํผ์คํ์ ๊ณ ํฅ ์ง๋ช >" // testee_hometown์ด null์ธ์ง ๊ฒ์ฌํ๋ค. null์ด๋ฉด ์ฐ์ฐ์์ ์ฐ๋ณ์ ์๋ ๊ฐ์ด ๋์ ๋์ ๋๋ค. println("์ด ์ฅ์น๋ ${hometown_display}์ ์ฌ๋ ๋ชจ๋ ์ฌ๋์ ์๋ ๊ธ์ก์ ํฉ์น ๊ฒ๋ณด๋ค ๋ ๋น์๋๋ค.")
4. ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ[ํธ์ง]
JetBrains์์ ๊ฐ๋ฐํ๊ณ ๊ตฌ๊ธ์ด ๋ฐ์ด์ฃผ๋ ์ธ์ด์ธ ๋งํผ ์ด์ชฝ์ ํนํ๋ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฃผ๋ก ์ง์๋๋ค. ๋ํ์ ์ธ ๊ฒ์ด IntelliJ IDEA์ ์๋๋ก์ด๋ ์คํ๋์ค. ์ดํด๋ฆฝ์ค์์๋ Kotlin ํ๋ฌ๊ทธ์ธ์ ์ค์นํด ์ฌ์ฉํ ์ ์๋ค.
5. ๊ธฐํ[ํธ์ง]
- ๊ฐ์๋จธ์ ์ ์ด์ฉํ์ง ์๋ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ด๋ ์๋ฒ ๋๋, IoT ํ๊ฒฝ์ ์ํด ๊ฐ๋ฐ๋ Kotlin/Native ์ปดํ์ผ๋ฌ๋ก ๊ธฐ๊ณ์ด ์ต์ข ์ปดํ์ผ์ ํ ์ ์๋ค. LLVM์ ๊ธฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, ์ฐธ์กฐ ํ์ ์นด์ดํ ๋ฐฉ์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ค. iOS๋ Raspberry Pi ๊ฐ๋ฐ๋ ๊ฐ๋ฅํ๋ค.
- ์ต์ ์ธ์ด์์ ๊ฐ๋ฐ๋ ์ธ์ด ๋์์ธ ์ปจ์ ๋ค์ ๋ง์ด ํ์ฉํ์ง๋ง, ์ดํดํ๊ธฐ ํ๋ค๊ฑฐ๋ ์ฌ์ฉ๋น๋๊ฐ ๋จ์ด์ง๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ฑฐํด ์ธ์ด ์์ฒด๋ฅผ ๋จ์ํ๊ฒ ๋ง๋ค๊ณ ํด๋ง์ ๊ฐํํ ์ธ์ด๋ผ๋ ํ๊ฐ๋ฅผ ๋ฐ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ณธ๋ฌธ์ ์๊ฐ๋ Kotlin์ ?(null ์์ ์ฑ)๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ธฐ๋ฅ์ Scala์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ๋ฅ๋ค์ด๊ณ , ๋ฐ๋๋ก Scala์ ์กด์ฌํ์ง๋ง Kotlin์ ์กด์ฌํ์ง ์๋ ๊ธฐ๋ฅ์ ์ ๋ง ๋ง๋ค.[13]
- ์คํ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๊ฒ์ํด๋ณด๋ฉด Kotlin ์ง๋ฌธ๋ค์ ๊ฑฐ์ ์๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, Java์ Kotlin์ ์๋ก ์๋ฒฝํ๊ฒ ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ต์ด ์ ๋์จ๋ค๋ฉด Java๋ก ์ง๋ฌธ๋ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
- Kotlin๊ณผ IntelliJ IDEA๋ฅผ ๋ง๋ JetBrains์์ ์ ์ํ ์ฝํ๋ฆฐ ์ ์ฉ ์น ํ๋ ์์ํฌ Ktor๊ฐ ์กด์ฌํ๋ค.
- Java์ ์ํธ ํธํ๋๋ ์ธ์ด์ธ๋งํผ JetBrains์ Java, Kotlin IDE์ธ IntelliJ IDEA์ Java ์ฝ๋๋ฅผ Kotlin ์ฝ๋๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค.[15]
6. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
7. ๋ฐ๊นฅ ๋งํฌ[ํธ์ง]
[1] ์ฝํ๋ฆฐ ๋ฒ์ 1.3๋ถํฐ main ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์๊ฐ ์์ด๋ ์คํ๋๋ค. 1.3 ์ดํ์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ฌ๋ ๋๊ฐ์ด ์๋ํ๋ค.
fun main() {
println("Hello World!")
}[2] ๋ ๊ฒ์๋ ๋ค๋ฅด๋ค! ๋ ๊ฒ์ ๋ฆฌ๋ฌ์ ์ฐจ์ฉํด ๋ง๋ ๋ผํด ํด๋ฝ์์
์ฅ๋ฅด์ด๋ค. ๋ ๊ฒํค ์์
์ ๋ค์ง๋ค ๋ณด๋ฉด Despacito์ ๊น์ง ๋๋ ๋งํผ ๋น์ทํ ์์
์ด ์์์ ธ ๋ด๋ฆฐ๋ค.
[3] JVM ํ๊ฒฝ์์๋ ๋์๊ฐ๋ค.
[4] ์ค์ ๋ก๋ ์ infix ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ์๋ํ๋ค. ์ฌ์น์ฐ์ฐ ๋ํ infix ํจ์๋ก ๊ตฌํ๋์ด 'a * 3'์ผ๋ก๋, 'a.times(3)'์ผ๋ก๋ ์ธ ์ ์๋ค. ์ฐ์ฐ์์ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ๋ ์ด infix ํจ์๋ก ๋์๊ฐ๋ค.
[5] JVM6๋ฅผ ํ๊ฒ์ผ๋ก ์ปดํ์ผํด์ผ ํ๋ค. JVM8 ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ ์๋ ์๋ค.
[6] Kotlin์์ Java ์ฝ๋ ์ฌ์ฉ ์์๋ ๊ทธ๋ฅ ์ฌ์ฉํ ์ ์์ง๋ง, Java์์ Kotlin ์ฝ๋ ์ฌ์ฉ ์์๋ @Jvm* ๊ณ์ด์ annotation ์ฌ์ฉ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค.
[7] ๋ณ์๋ฅผ private์ผ๋ก ์ ์ธํด๋์ผ๋ฉด ์ ๊ทผํ ๋ getXX() ๋๋ setXX() ํจ์๋ฅผ ํธ์ถํด์ผํ๋ฏ๋ก public์ผ๋ก ์ ์ธํ๋ค๋ฉด ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋์ ๊ทธ์ ๋ฐ๋ฅธ ๋ถํ์ํ ๋ฆฌ์์ค ์๋ชจ๋ฅผ ์ค์ผ ์ ์๋ค. ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์์์ ๋์์ ์ฒด๊ฐํ๊ธฐ ์ด๋ ค์ธ ์ง ๋ชฐ๋ผ๋ ๋ฐฉ๋ํ ์์ ์ฝ๋์์๋ ํจ๊ณผ๊ฐ ์๋ค.
[8] ๋ฃ์ด๋ ์ค๋ฅ๋ ๋์ง ์๋๋ค.
[9] 1996๋
๋จธ๋ผ์ด์ด ์บ๋ฆฌ์ ๋ณด์ด์ฆ ํฌ ๋ฉ์ One Sweet Day ์ญ์ 16์ฃผ ์ฐ์ 1์๋ผ๋ ์ ๊ธฐ๋ก์ ๊นผ์ผ๋ ๋ก์ค ๋ธ ๋ฆฌ์ค์ Macarena์ ๋ฐ๋ ค ์ฐ๋ง ์ฐจํธ์์๋ 2์๋ฅผ ์ฐจ์งํด์ผ ํ๋ค.
[10] Shakira์ Chantaje์, ๋ฎค์ง ๋น๋์ค์ ์กฐํ์๊ฐ ๋
ธ๋์ ์ธ๊ธฐ์ ๋นํด ์ ์ ๋์ค๋ ์นด๋ ๋น์ ๊ฒฝ์ฐ๋ I Like It์ด ๋ํ์ ์ธ ์์์ด๋ค. ํด๋น ๋ฎค์ง ๋น๋์ค๋ ๊ทธ๋
์ ์ ์ผํ 10์ต ์กฐํ์ ๋ฎค์ง๋น๋์ค์ด๋ค.
[11] ์ด์ธ์๋ ๋ง๋ฃฌ 5์ ๋ํ๊ณก 'Sugar'๋ ์ ๋ชฉ์ด 'Hacked by Kuroi'SH & Prosox' ๋ก ๋ฐ๋์๋ค.
[12] ํ์ฌ ์ ํ๋ธ์์ Despacito ์ด์ธ์๋ 60์ต ํ๋ฅผ ๋ฌ์ฑํ ์์์ ์์ด ๊ฐ์กฑ์ ์์ด ๋ฒ์ ์ธ Baby Shark ํ๋๋ฟ์ด๊ณ , 50์ต ํ ์ด์๋ ์๋ ์๋ฐ์ Shape of You ํ๋ ๋ฟ์ด๋ค. ์กฐํ์ ์ฆ๊ฐ ์ถ์ด๊ฐ ์๋นํ ๋นจ๋ผ ์กฐ๋ง๊ฐ ์กฐํ์์์ Despacito๋ฅผ ์ถ์ํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค
[13] ?๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์๊ณผ ๋์์ ํ์
์์คํ
์์ ๋
ผ๋ฆฌ์ ์ธ ์ค๋ฅ์ด๊ธฐ ๋๋ฌธ์ ํ์
์์ ์ฑ์ ๊ทน๋๋ก ๊ณต์ ๋ค์ด๋ Scala ๊ฐ์ ์ธ์ด์์ ๋์
ํ ๊ฐ๋ฅ์ฑ์ ์๋ค. Scala 2์์ null์ ๋์ฒํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋จ์ํ ๋นํธ์ธ ํ์
์ค ํ๋์ผ ๋ฟ์ธ Option ํ์
์ด๊ณ , ์ธ์ด ์์ฒด์ null ์์ ์ฑ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์๋ค. ํ์ง๋ง Scala 3์์๋ `-Yexplicit-nulls` ์ปดํ์ผ๋ฌ ์ต์
์ผ๋ก ํ์
์๊ณ๋ฅผ ์์ ํ ๋ฐ๊พธ์ด์ ๋ ํผ๋ฐ์ค ํ์
์ด๋ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก nullableํ์ง ์๊ฒ ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, Null์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด `String|Null` ๋ก ํ์
์ ์ง์ ํด์ผ ํ๋ค. ํ์
์์คํ
์ ๋
ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ๋์
ํ์ง ์์ผ๋ฉด์๋ null ์์ ์ฑ์ ์ป์ ์ฐ๊ตฌ ์ฑ๊ณผ์ด๋ค.
[14] ์ด๋ ์ผ๋ฏธ๋๋จธ๋์ ํ๋ก๋์ค 101์ ์ํฅ์ด ํฐ๋ฐ, ์ผ๋ฏธ๋๋จธ๋ ์๋ฆฌ์ฆ๊ฐ ํ๊ตญํํฉ์ ๋ํ ์ฌ์กฐ๋ช
์ ์ด๋ฐ์ํค๋ฉฐ ์ข
๋์ ์์ด๋ํํฉ์ด ์๋ ์ธ๋ํํฉ๋ค์ด ์ฃผ๋ฅ๋ก ์ฌ๋ผ์ค๊ธฐ ์์ํ๊ณ , ํํฉ์ด ํ๋์ ํ๋๊ฐ ๋๋ฉด์ ๊ด๋ จํ ํ๋ก๊ทธ๋จ๊ณผ ์ปจํ
์ธ ๋ค์ด ์ฐํ์ฃฝ์ ๋๋ฆฝํ๋ค. ๋ํ ๋์์ ํ๋ก๋์ค 101์ด ๋๋ฐ์ ์น๋ฉด์ ์ฃผ๋ก ์ฌ์ ์์ด๋์ ์ค์ฌ์ผ๋ก ํ ๊ฐ์ข
์ปจํ
์ธ ๋ ํ๋ก๊ทธ๋จ๋ค์ด ๋๋ค์ ๋์ค๋งค์ฒด๋ฅผ ์ ๋ นํด๋ฒ๋ ธ๋ค. ์์ฐํ ๋ฌผ๊ฑด๋์ ํ์ ๊ด์ฌ์์ ๋ฉ์ด์ง๊ฒ ๋ ๊ฒ. ๋๋ถ์ด V์ฑ ๋ฑ ํ๊ตญ๊ฐ์์์ ์์ฒด์ ์ผ๋ก ์ปจํ
์ธ ๋ฅผ ์ฌ์์ฐํ ์ ์๋ ์๋จ๋ค์ด ๋ฐ๋ฌํ๊ฒ ๋๋ ์ผ์ ๊ฐ์๋ค์ด ์ง์ ํ์ ์ธ๊ธํ์ง ์๋ํ ํ์ ์ฃผ๋ชฉํ ์ฌ๊ฑด์ด ์๋๊ฒ ๋ ์
.
[15] ์ด ๊ธฐ๋ฅ์ IntelliJ IDEA๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง IDE์ธ Android Studio์๋ ์กด์ฌํ๋ค.
[16] ๊ทธ๋ฌ๋ ๊ฐ์ด ์๋ ์ด์๊ทผ๊ณผ ์ ํ๋์ด ์ด ๋
ธ๋๋ฅผ ๋ชจ๋ฅธ๋ค๊ณ ํ์ฌ์ ์ถฉ๊ฒฉ๋จน์๋ค.
[17] ์ ํ๋ฌด๋ Despacito๋ ๋
ธ๋๋ฅผ ์ฒ์ ๋ฃ๋๋ค๊ณ ํ๋ค.
[18] ํ๊ตญ์ ์๋์ง๋ง ์ ์๋ณ ๋ฑ์ฅ๊ณก์ด ์ด์์๋ ์ผ๋ณธํ๋ก์ผ๊ตฌ๋ฅผ ๋ณด๋ฉด ์ค๋จ๋ฏธ ์ชฝ ์ ์๋ค์ด ์ด ๋
ธ๋๋ฅผ ์์ฒญ๋๊ฒ ๋ง์ด ๋ฑ์ฅ๊ณก์ผ๋ก ์ฌ์ฉํ๋ค. ์๋ง KBO์์๋ ๋ฑ์ฅ๊ณก ๋ฌธํ๊ฐ ์ด์๋จ์๋๋ผ๋ฉด ์ฉ๋ณ ์ ์๋ค์ด ๊ฝค ๋ฑ์ฅ๊ณก์ผ๋ก ์ผ๊ฒ ์ง๋ง..