Kotlin์ ํ์ ๋ฐฐ๊ฒฝ ๋ฐ ํน์ง
Kotlin์ JetBrains์์ ๊ฐ๋ฐํ ์ ์ ํ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, 2011๋ ์ ์ฒซ ๊ณต๊ฐ๋์๊ณ 2016๋ 1.0 ๋ฒ์ ์ด ์ ์ ์ถ์๋์์ต๋๋ค.
์ ์ ํ์ (Static Typing)์ด๋?
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํ์ ์ด๋ ๋ณ์๋ ํจ์์ ๊ฐ์ด ์ด๋ค ์ข ๋ฅ์ธ์ง(ex. Int, String, Boolean ๋ฑ)๋ฅผ ์๋ฏธํ๋๋ฐ
์ ์ ํ์ ์ธ์ด๋ ์ปดํ์ผ ์์ ์ ๋ณ์๋ ํํ์์ ํ์ ์ด ์ ํด์ง๊ณ ๊ฒ์ฌ๋๋ ์ธ์ด์ด๋ฉฐ ๋์ ํ์ ์ธ์ด๋ ๋ฐํ์ ์์ ์ ํ์ ์ด ๊ฒฐ์ ๋๋ ์ธ์ด์ ๋๋ค.
JetBrains๋ IntelliJ IDEA์ ๊ฐ์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ๋ ํ์ฌ๋ก, ๋ด๋ถ์ ์ผ๋ก ๋๋ถ๋ถ์ ์ฝ๋๋ฅผ Java๋ก ์์ฑํด์์ต๋๋ค.
ํ์ง๋ง Java๋ ์์ญ ๋ ์ ์ญ์ฌ๋ฅผ ๊ฐ์ง ๋งํผ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ฌธ์ ์ ์ ์๊ณ ์์์ต๋๋ค.
1. ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ๋ง๋ค
Java๋ ๋จ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ผ๋ ํ์์ ์ธ ์ฝ๋(boilerplate)๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํด์ผ ํจ
→ Java์์๋ getter, setter, equals, hashCode ๋ฑ์ ์๋์ผ๋ก ์์ฑํด์ผ ํ๋๋ฐ Kotlin์์๋ ์ด ๋ชจ๋ ๊ฒ์ data class ํ ์ค๋ก ํํํ ์ ์์
2. Null ์์ ์ฑ์ด ๋ถ์กฑํ๋ค
Java์์๋ ์ฐธ์กฐ ํ์
๋ณ์์ null์ ํ ๋นํ ์ ์์
→ ์ด๋ก ์ธํด Java์์๋ NullPointerException ๋ฐํ์ ์ค๋ฅ๊ฐ ์์ฃผ ๋ฐ์ํ๋๋ฐ Kotlin์ ์์ ํ์
์์คํ
์์ null ๊ฐ๋ฅ์ฑ(ํ์ฉ/๋ถ๊ฐ๋ฅ)์ ๋ช
์ํ๋๋ก ๊ฐ์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
str?.length → str์ด null์ด ์๋๋ฉด length ํธ์ถ, null ์ด๋ฉด null ๋ฐํ
?: → Elvis ์ฐ์ฐ์๋ก null ์ผ ๊ฒฝ์ฐ ๋์ฒด ๊ฐ์ ๋ฐํ
3. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ทจ์ฝํ๋ค
Java๋ ์ ํต์ ์ธ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก ์์ํ์
→ Java 8 ์ด์ ์๋ ๋๋ค๋ ๊ณ ์ฐจ ํจ์์กฐ์ฐจ ์ง์ํ์ง ์์์ง๋ง Kotlin์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ฐ์ค๋ฝ๊ฒ ์ง์ํ๋ฉฐ map, filter, reduce ์ ๊ฐ์ ํจ์๋ค์ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์์
4. ๊ฐ๊ฒฐ์ฑ๊ณผ ์์ฐ์ฑ์ด ๋ถ์กฑํ๋ค
→ Java๋ ๊ฐ๋จํ ์์
๋ ๋ง์ ์ฝ๋๊ฐ ํ์ํ์ง๋ง Kotlin์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๊ฒฐํจ๊ณผ ๋ช
ํ์ฑ์ ์ถ๊ตฌํ๋ฉฐ, ์์ฐ์ฑ ํฅ์์ ๋งค์ฐ ํจ๊ณผ์ ์
JetBrains๋ ๊ธฐ์กด์ Java ์ํ๊ณ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ๋ฉด์๋ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ JVM ๊ธฐ๋ฐ์ ์๋ก์ด ์ธ์ด์ธ Kotlin์ ์ค๊ณํ์์ต๋๋ค.
Kotlin์ Java์ 100% ์ํธ์ด์ฉ๋๋ฉฐ, ๊ฐ๊ฒฐํ๊ณ ์์ ํ๋ฉฐ ํ๋์ ์ธ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
ํนํ Android ๊ฐ๋ฐ์์๋ Java์ ๋์ฒด์ฌ๋ก ๋น ๋ฅด๊ฒ ์๋ฆฌ์ก์ผ๋ฉฐ, 2017๋ ์๋ Google์ด Android์ ๊ณต์ ์ธ์ด๋ก ์ฑํํ์์ต๋๋ค.
์ต๊ทผ์๋ ์๋ฒ ๊ฐ๋ฐ์์๋
- Spring Boot๊ฐ Kotlin์ ๊ณต์ ์ง์ํจ
- Kotlin์ ํน์ง์ด Spring์ ์ค์ /๋ก์ง ์ฝ๋์ ์ ์ด์ธ๋ฆผ
- ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ
- ์ฝ๋ฃจํด์ ์ด์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ
-> Spring WebFlux๋ ๋น๋๊ธฐ ์๋น์ค์์๋ CompletableFuture, Mono/Flux ๋ฑ์ ์ฌ์ฉํ๋๋ฐ, Java์์ ์์ฑ/์กฐํฉ์ด ๋ณต์กํจ - null ์์ ์ฑ
- data class
- DSL(Domain Specific Language) ์คํ์ผ์ ์ ์ธํ ์ฝ๋
-> Kotlin์ ๋๋ค์ ๊ณ ์ฐจํจ์๋ฅผ ํ์ฉํด ๋ง์น ์์ฐ์ด์ฒ๋ผ ์ฝํ๋ DSL ์คํ์ผ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์
- ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ
์ ์ด์ ๋ก Spring Boot์์ ๊ถํฉ์ผ๋ก ๋ง์ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์ต๋๋ค.
Kotlin์ ๋ด๋ถ ๋์ ๋ฐฉ์
Kotlin์ ๊ธฐ๋ณธ์ ์ผ๋ก JVM ์์์ ์คํ๋ฉ๋๋ค.
์ฆ, Kotlin์ผ๋ก ์์ฑํ .kt ํ์ผ์ ์ปดํ์ผ๋์ด Java์ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๋๊ณ , ๊ทธ ๋ฐ์ดํธ์ฝ๋๋ JVM์์ ์คํ๋ฉ๋๋ค.
์ด ๋๋ถ์ Kotlin์ ๊ธฐ์กด Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Java ์ฝ๋์ Kotlin ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ก์ ํธ์์ ํผํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
Hello.kt → Kotlin Compiler → Hello.class → JVM ์คํ
์ฝ๋ฃจํด(Coroutine)์ ํ์์ฑ๊ณผ ๋์ ๋ฐฉ์
Kotlin์์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ
ํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์์ ์ ๋๋ค.
ํนํ UI ์ฒ๋ฆฌ๋ฅผ ๋ธ๋กํนํ์ง ์์ผ๋ฉด์ ๋คํธ์ํฌ ์์ฒญ์ด๋ ๋์คํฌ I/O์ ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ ์ ํ ๋น๋๊ธฐ ๊ตฌ์กฐ๊ฐ ํ์ํฉ๋๋ค.
๊ธฐ์กด Java์์๋ Thread, Executor, Future ๋ฑ์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌํ์ง๋ง
- ๋ณต์กํ ์ค๋ ๋ ๊ด๋ฆฌ
- ์ฝ๋ฐฑ ์ง์ฅ (callback hell)
- ๋ถํ์ํ ๋ฆฌ์์ค ์ฌ์ฉ
๊ณผ ๊ฐ์ ๋จ์ ์ด ์์ต๋๋ค.
Kotlin ์ฝ๋ฃจํด์ ๊ฐ๋
Kotlin์ ์ด๋ฌํ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ด๋ ค์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฝ๋ฃจํด(Coroutine)์ด๋ผ๋ ๊ฐ๋ ์ ์ธ์ด ์ฐจ์์์ ๋์ ํ์ต๋๋ค.
์ฝ๋ฃจํด์ ๋ง์น ๊ฒฝ๋ ์ค๋ ๋์ฒ๋ผ ๋์ํ๋ฉฐ, ๋๊ธฐ ์ฝ๋์ฒ๋ผ ๋ณด์ด์ง๋ง ๋น๋๊ธฐ๋ก ์๋ํ๋ ๊ฒ์ด ํน์ง์ ๋๋ค.
- launch, async ๋ฑ์ ์ฌ์ฉํด ๋น๋๊ธฐ ์์
์์
- delay, withContext, await ๋ฑ์ผ๋ก ์์
์ผ์ ์ค๋จ ๋ฐ ์ฌ๊ฐ
- suspend ํค์๋๋ก ์ค๋จ ๊ฐ๋ฅํ ํจ์ ์ ์
runBlocking → ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ธ๋กํนํ๋ฉฐ ์ฝ๋ฃจํด ํ๊ฒฝ ์ ๊ณต
launch → ์๋ก์ด ์ฝ๋ฃจํด ์คํ
delay → non-blocking ์ง์ฐ
(IDE์์ ์คํํด๋ณด๋ฉด Hello, ๊ฐ ์ถ๋ ฅ๋๊ณ 1์ด ํ์ World!๊ฐ ์ถ๋ ฅ๋จ)
Java๋ ๋น๋๊ธฐ๋ฅผ ๊ตฌํํ ๋ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ์์ Future, CompletableFuture, ExecutorService ๊ฐ์ ๋๊ตฌ๋ค์ด ์ฌ๋ผ๊ฐ ์๋ ๊ตฌ์กฐ์ด๊ณ
Kotlin์ ์ค๋ ๋๋ฅผ ์ง์ ์ ๊ฑด๋๋ฆฌ๊ณ , ์ฝ๋ฃจํด์ด๋ผ๋ ๋ ๊ฐ๋ฒผ์ด ๋น๋๊ธฐ ๋จ์๋ฅผ ์ฐ๋ ๊ตฌ์กฐ๋ก ๋ณผ ์ ์์
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ์ ์ถ๋ ฅ(I/O) ์์๋ณด๊ธฐ (0) | 2025.06.03 |
---|---|
Java Collections Framework ์์๋ณด๊ธฐ (0) | 2025.05.29 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๊ตฌ๋ฌธ๊ณผ ๊ตฌํ ๊ธฐ๋ฒ (2) | 2025.04.19 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค๊ณ (1) | 2025.04.16 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๋ณ์ฒ (1) | 2025.04.12 |