[Kotlin/JVM] μ½νλ¦°μμ μμ£Ό μ¬μ©νλ λ¬Έλ²
μ μ΄ κΉ¨μ μλ²½μ ν¬μ€ν νκΈ°λ μ λ§ μ€λλ§μ΄λ€μ
μ΄λ²μλ μ½νλ¦°μμ μμ£Ό μ¬μ©λλ λ¬Έλ²μ λν΄μ μμλ΄€μ΅λλ€.
μ½νλ¦°μμ μμ£Ό μ¬μ©νλ λ¬Έλ²λ€
1. ν΄λμ€ λ§λ€κΈ°
data class Customer(val name: String, val email: String)
μ½νλ¦°μμλ μ΄ νμ€μ΄λ©΄ κ°λ¨ν ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€. λν, μλ λ©μλλ€μ κΈ°λ³Έμ μΌλ‘ μμ±λ©λλ€.
- getters, setters
- equals()
- hashCode()
- toString()
- copy() <-- μλ°μ cloneκ³Ό κ°μ λ μ
- component1(), component2(), ... <--μ΄κ±΄ λμ€μ ν΄λμ€μ λν΄ μμΈν 보κ²λ λ μκ²λ κ² κ°λ€μ
2. ν¨μ νλΌλ―Έν°μ κΈ°λ³Έ κ° μ€μ
ν¨μ μ μ μ μ λ¬λ°μ νλΌλ―Έν°μ κΈ°λ³Έκ°μ μλμ κ°μ΄ μ€μ ν μ μλ€.
fun foo(a: Int = 0, b: String = "") { ... }
μ μ½λλ foo ν¨μ νΈμΆ μ Int νμ κ³Ό String νμ μ νλΌλ―Έν°λ₯Ό μ λ¬νμ§ μμΌλ©΄ κΈ°λ³Έκ°μΌλ‘ 0κ³Ό λΉ μ€νΈλ§ ""μ μ΄μ©νμ¬ λ‘μ§μ μ²λ¦¬νκ²λλ€. λ°λΌμ ν¨μ νΈμΆ μ foo()λΌκ³ νΈμΆμ΄ κ°λ₯νλ€.
3. 리μ€νΈ νν°λ§
val positives = list.filter { x -> x > 0 }
μλ°μ streamμμ νν°λ§ νλ κ²μ²λΌ λλ€μμ μ΄μ©ν΄μ 리μ€νΈμμ νΉμ 쑰건μ ν΄λΉνλ κ²λ€λ§ μ λ³ν μ μλ€.
λν it ν€μλλ₯Ό μ΄μ©ν΄μ μλμ κ°μ΄ λ κ°κ²°νκ² μμ±λ κ°λ₯νλ€.
val positives = list.filter { it > 0 }
4. 컬λ μ μμ νΉμ μμ μ‘΄μ¬μ 무 νμΈνκΈ°
// νΉμ μ€νΈλ§μ΄ 리μ€νΈμ μ‘΄μ¬νλμ§ νμΈ
if ("john@example.com" in emailsList) { ... }
// νΉμ μ€νΈλ§μ΄ 리μ€νΈμ μ‘΄μ¬νμ§ μλμ§ νμΈ
if ("jane@example.com" !in emailsList) { ... }
5. μ€νΈλ§ ν¬λ§€ν (String Interpolation)
var name = "ν©λΉν"
println("Name $name")
μ€νΈλ§ λ΄μ λ³μμ κ°μ λ£μ μ μλ κΈ°λ₯μΌλ‘ μλ°μ μ€νΈλ§ ν¬λ§€ν°μ μ μ¬ν κΈ°λ₯μ΄λ€.
6. μΈμ€ν΄μ€ κ²μ¬ (Instance Check)
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
μ½νλ¦°μμ when μ μλ°μ switch λ¬Έκ³Ό μ μ¬ν κΈ°λ₯μΌλ‘ μ’ λ κ°κ²°νκ² switchλ¬Έμ ννν μ μλ€λ μ₯μ μ΄ μλ€.
7. Map μννκΈ° (Traversing a map/list of pairs)
for ((k, v) in map) {
println("$k -> $v")
}
μλ°μμλ keySetμ΄λ valuesλ₯Ό κ°κ° κ°μ Έμμ μ²λ¦¬ν΄μΌ νμ§λ§ μ½νλ¦°μμλ key, value λ₯Ό λμμ κ°μ Έμμ μ²λ¦¬κ° κ°λ₯νλ€.
8. λ²μ μ¬μ©λ²
loopλ₯Ό μν΄μλ νΉμ λ²μλ₯Ό μ§μ ν΄μ€μΌ νλ κ²½μ°κ° λ§λ€. μ½νλ¦°μμλ μλμ κ°μ΄ λ€μν λ²μμ§μ λ²μ μ 곡ν΄μ£Όκ³ μλ€.
for (i in 1..100) { ... } // closed range: 100 ν¬ν¨
for (i in 1 until 100) { ... } // half-open range: 100 λ―Έν¬ν¨
for (x in 2..10 step 2) { ... } // 2λΆν° 2μ© μ¦κ°νλ©΄μ 10κΉμ§ ...
for (x in 10 downTo 1) { ... } // 10λΆν° 1μ© κ°μνλ©΄μ 1κΉμ§ ...
if (x in 1..10) { ... } // λ§μ½ xκ° 1μ΄μ 10μ΄νλ©΄ ...
9. Read-Only List/Map
val list = listOf("a", "b", "c")
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
listOf, mapOf ν¨μλ₯Ό μ¬μ©νμ¬ μ½κΈ°μ μ© λ¦¬μ€νΈλ λ§΅μ μμ±ν μ μλ€.
10. ν€λ₯Ό μ΄μ©ν λ§΅μ κ° μ½μ΄μ€κΈ°
println(map["key"])
map["key"] = value
μ½νλ¦°μμλ λ§΅μ μμμ μ κ·Όν λ λ°°μ΄μ²λΌ μ κ·Όμ΄ κ°λ₯νλ€.
11. Lazy μμ±
val p: String by lazy {
// compute the string
}
12. νμ₯ ν¨μ (Extension Functions)
fun String.spaceToCamelCase() { ... }
"Convert this to camelcase".spaceToCamelCase()
Stringμ νμ₯ν¨μλ₯Ό μμλ‘ μΆκ°μ μνμ¬ μ¬μ©μ΄ κ°λ₯νλ€
13. μ±κΈν΄ κ°μ²΄ μμ±νκΈ°
object Resource {
val name = "Name"
}
14. if not null μ κ°κ²°νκ² μμ±
val files = File("Test").listFiles()
println(files?.size)
filesμ sizeλ₯Ό νΈμΆν λ nullableμ μλ―Ένλ ?λ₯Ό λΆμ¬μ£Όλ©΄ not nullμΌ κ²½μ°μλ§ μ€ννκ² λλ€. λ§μ½ filesκ° nullμ΄λΌλ©΄ nullμ΄ μΆλ ₯λλ€.
15. if not null and else
val files = File("Test").listFiles()
println(files?.size ?: "empty")
μ΄λ²μλ if not null μ else 쑰건μ λΆμ¬ nullμ΄λ©΄ "empty" λ₯Ό μΆλ ₯νλλ‘ λ³κ²½νμλ€.
16. nullμΌ κ²½μ° λ¬Έ(statement) μ€ννκΈ°
val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is missing!")
17. possibly empty collectionμμ 첫λ²μ§Έ μμ κ°μ Έμ€κΈ°
val emails = ... // might be empty
val mainEmail = emails.firstOrNull() ?: ""
18. nullμ΄ μλ κ²½μ° μ€ννκΈ°
val value = ...
value?.let {
... // λΈλλ΄μ λ¬Έμ₯μ valueκ° not nullμΌ κ²½μ°μ μ€ννλ€
}
19. nullable Boolean
val b: Boolean? = ...
if (b == true) {
...
} else {
// `b` is false or null
}
Booleanνμ μ λ³μκ° nullμΈμ§ μλμ§ λ³λλ‘ κ²μ¬ν νμκ° μλ€.
20. λ λ³μμ κ° μ€μνκΈ°
var a = 1
var b = 2
a = b.also { b = a }
μλ°μμλ λ λ³μμ κ°μ swapν λ μμλ³μλ₯Ό νλ μΆκ°λ‘ λ§λ€μ΄μ swapνλ κ²μ΄ μΌλ°μ μ΄μ§λ§ μ½νλ¦°μμλ κ·Έλ΄ νμκ° μλ€.
μ΄μΈμλ μ¬λ¬κ°μ§ μλ°λ³΄λ€ λ μ½κ³ κ°κ²°ν΄μ§ μμ£Ό μ¬μ©λλ λ¬Έλ²μ΄ μμΌλ μ΄ μ λλ§ μκ°ν©λλ€.
λλ¨Έμ§λ μλ μΆμ²μ μΈκΈν μ½νλ¦° 곡μμ¬μ΄νΈμμ νμΈν΄λ³΄μΈμ.
μ΄λ μ λ κΈ°λ³Έμ μΈ λ¬Έλ²μ μ΅μν΄μ§λ©΄ μ¬μ΄ μκ³ λ¦¬μ¦ λ¬Έμ νμ΄λ₯Ό μ½νλ¦°μΌλ‘ νλ©΄μ λΉ λ₯΄κ² μ΅νλ³Ό κ³νμ λλ€.