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) ν μ μμ.
μ½λ£¨ν΄ νΉμ§
- μ€λ¨κ³Ό μ¬κ° : μ½λ£¨ν΄μ μ€ν μ€κ°μ νΉμ ν€μλλ₯Ό μ¬μ©ν΄ μ€νμ μ€λ¨νκ³ , μνλ₯Ό μ μ₯ν λ€ λμ€μ λ€μ μ€ν μ¬κ° κ°λ₯
- λΉλκΈ°μ²λ¦¬: μ μΆλ ₯(i/o) μμ μ΄λ κΈ΄ μ€ν μκ°μ μꡬνλ μμ μμ λΉλκΈ°μ μΌλ‘ μ€νλλ©°, λμμ±μ μ§μν¨.
- κ°λ²Όμ: μ½λ£¨ν΄μ os μ€λ λμ λ¬λ¦¬ κ°λ²Όμ΄ λ¨μλ‘ λμνλ©° νλμ μ€λ λμμ λ€μμ μ½λ£¨ν΄μ μ€νν μ μμ.
- μν μ μ§: μ½λ£¨ν΄μ μ€λ¨λ μμ μμ μν(λ³μ, νΈμΆ μ€ν) λ₯Ό μ μ§νλ©°, μ¬κ° μ μ΄μ μνλ₯Ό 볡μνμ¬ μ€νμ μ΄μ΄κ°.
μ€μ ν€μλ : 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
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
Kotlin
2016λ 2μμ μ μ μΆμλ IntelliJ IDEA λ‘ μ λͺ ν JetBrains κ° κ°λ°ν μ€ν μμ€
namu.wiki