DevLog πΆ
[Kotlin] μ½νλ¦°μ λ³μμ νμ λ³Έλ¬Έ
π‘ν΅μ¬λ§ 골λΌλ°°μ°λ μ½νλ¦° νλ‘κ·Έλλ° μ 리
: κΈ°λ³Έμ μΌλ‘ μλ°μ κ²ΉμΉλ λΆλΆμ μ μΈνκ³ , κ°λ¨ν λ¬Έλ²λ€λ§ μ 리νκ³ μ νλ€. π
βοΈ μ½νλ¦°μ νΉμ§
- JVMμμ μ€νλκΈ° λλ¬Έμ μλ°μ νΈνμ±μ΄ λλ€.
- μ μ νμ
μΈμ΄μ΄κΈ° λλ¬Έμ, λͺ¨λ νμ
μ μ»΄νμΌ μμ μμ μ μ μλ€.
- νμ
μΆλ‘ κΈ°λ₯μ ν΅ν΄ λ³μ μ μΈ μ λ³μμ νμ
μ λͺ
μμ μΌλ‘ μ§μ νμ§ μμλ μ²λ¦¬ν μ μλ€.
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ§μνλ€.
- ν¨μν νλ‘κ·Έλλ°μ μ§μνκΈ° λλ¬Έμ, λ€μν ν¨μμ λλ€μμ μ§μνλ€.
- μ§μ ν¨μ (ν¨μ λ΄λΆμ λ€λ₯Έ ν¨μ μ μΈ)
- λ©€λ² ν¨μ (ν΄λμ€ λ΄λΆμ ν¨μλ₯Ό μ μΈ = μλ°μ λ©μλ)
- μ λ€λ¦ ν¨μ (ν¨μμ μ λ€λ¦ νμ
μ¬μ©)
- κ³ μ°¨ ν¨μ (λ€λ₯Έ ν¨μλ₯Ό μΈμλ‘ λ°μ μ€ν)
- μ¬κ· ν¨μ (μ¬κ· νΈμΆ μ΅μ ν)
- νμ₯ ν¨μ (κΈ°μ‘΄ ν΄λ«μ κΈ°λ₯μ μΆκ°)
- λ¬Έλ²κ³Ό μ½λκ° κ°κ²°νλ©°, ν΄λμ€μ Getter / Setterλ₯Ό μλμΌλ‘ μμ±ν μ μλ€.
- NPEλ₯Ό 컀λ²νλ€. λ³μ νμ
λμ ?μ λΆμ¬μ Null νμ
μμ κ°λ¨νκ² μλ €μ€ μ μλ€.
βοΈ μ½νλ¦° μ ν리μΌμ΄μ
μ λΉλ μ μ°¨
.kt
-> (μ½νλ¦° μ»΄νμΌλ¬)
-> *.class
-> *.jar
(μ΄λ, μ¬μ©μκ° --include-runtimeμ νμ©νμ¬ μ½νλ¦°μ λ°νμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°λ¦¬μ μ ν리μΌμ΄μ
λ΄λΆλ‘ ν¬ν¨μν¬ μ μλ€. νμ§ μμΌλ©΄, λ³λμ μ½νλ¦° λ°νμ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ°°ν¬νμ¬ μ¬μ©νλλ‘ νλ€.)
-> JVM (java)
-> μ€ν
βοΈ κΈ°λ³Έ λ¬Έλ²
- κΈ°λ³Έμ μΌλ‘ ν¨μ μ μΈ μ fun ν€μλλ₯Ό μμ λΆμΈλ€.
- ν¨μλ μμ€ μ½λ νμΌμ μ΄λλ λ°λ‘ μ μκ° κ°λ₯νλ€.
- ν¨μ λ΄λΆμ 맀κ°λ³μλ μ§μλ³μ νμ
μ, μ΄λ¦ λ€μμ μ½λ‘ (:)μ μΆκ°ν λ€ μ§μ νλ€.
- ν¨μμ λ°νκ° νμ
μ ν¨μ μ μ λ¬Έμ₯ λμ μ½λ‘ μ μΆκ°ν ν μ§μ νλ€. λ°νκ°μ΄ μλ€λ©΄ Unit νμ
μΌλ‘ μ μνλ€.
// λ°νκ°μ΄ String νμ΄κ³ , μΈμκ° IntνμΈ λ©μλ μμ
fun test(option: Int) : String {
return if (option == 1) "μλ
νμΈμ" else "μλ
ν κ³μΈμ"
}
- μ½νλ¦° νμ€μμλ JDK νμ€ λΌμ΄λΈλ¬λ¦¬ λ©μλ, ν΄λμ€μ λν λνΌ ν΄λμ€λ₯Ό μ 곡νλ€.
- ex) `System.out.println()` -> `println()`
- λ¬Έμ₯μ μ μΌ λμ μΈλ―Έμ½λ‘ μ μλ΅ν΄λ λμ§λ§, λ κ° μ΄μμ ννμμ ν μ€λ‘ μ¬μ©ν λλ λΆμ¬μΌ νλ€.
- ν¨μμ μ€ν μ½λκ° νλμ ννμμ΄λΌλ©΄, μ€κ΄νΈμ λ°νκ° νμ
μ μλ΅ν μ μλ€!
// λ€μκ³Ό κ°μ΄ μμ λ₯Ό μμ ν μ μλ€.
fun test(option: Int) =
if (option == 1) "μλ
νμΈμ" else "μλ
ν κ³μΈμ"
- μ½νλ¦° νμ€ λΌμ΄λΈλ¬λ¦¬μ λͺ¨λ μ½λλ importλ₯Ό μ§μ νμ§ μμλ λ°λ‘ μ¬μ©ν μ μλ€. (μ κ·Ό μ μ΄μλ‘ λ§μΌλ©΄ λλ€.)
- λν, import μ asλ₯Ό ν΅ν΄μ λ³μΉμ μ§μ ν΄μ€ μ μλ€.
βοΈ λ³μ
- κΈ°λ³Έμ μΌλ‘ μ§μ λ³μλ©°, μ μ λ³μμ κ°λ
μ΄ μλ€.
- μΌλ¨ μ΄κΈ°νλλ©΄ κ°μ λ³κ²½ν μ μλ λΆλ³λ³μμ, μΈμ λ μ§ λ³κ²½μ΄ κ°λ₯ν κ°λ³ λ³μλ‘ κ΅¬μ±λλ€.
- λΆλ³λ³μ(=final)λ valλ‘, κ°λ³λ³μλ varλ‘ μ μΈνλ€.
- λͺ¨λ λ³μλ μ¬μ© μ μ λ°λμ μ΄κΈ°νλμ΄μΌ νλ©°, μ μΈλ νμ
μ체λ λ³κ²½μ΄ λΆκ°λ₯νλ€.
- λ³μμ νμ
μ λ³μ μ΄λ¦ λ€μμ μ½λ‘ (:)μ λΆμ¬μ μ§μ νλ€.
val a : Int = 7, var b : Int = 0
- νΉμ, νμ
μ μ°μ§ μκ³ μ΄λ° μμΌλ‘ μΈ μ μλ€. μ½νλ¦° μ»΄νμΌλ¬κ° νμ
μΆλ‘ μ ν΅ν΄ Intλ‘ μ²λ¦¬νλ€.
val b = 10
βοΈ νμ
- μ½νλ¦°μ κΈ°λ³Έ νμ
μ΄ λͺ¨λ ν΄λμ€λ‘ μ μλμ΄ μλ€. νμ§λ§, μ½νλ¦° μ»΄νμΌλ¬κ° μμμ κ°μ²΄λ‘ λ§λ€μ΄μ€λ€.
- κΈ°λ³Έ νμ
: Byte, Short, Int, Long, Float, Double, Char, Boolean
- μ«μ κ°μ νμ
λ³νμ μλμΌλ‘ ν΄μ£Όμ§ μλλ€. λͺ
μμ μΌλ‘ λ³ν ν¨μλ₯Ό νΈμΆν΄μ€μΌ νλ€.
val a: Int = 100;
val b: Long = a; // μ»΄νμΌ μλ¬!
val b: Long = a.toLong() // μ±κ³΅!
val b: Long = a + 1L; // μ΄ κ²½μ°λ ννμμ κ²°κ³Όλ‘ μ»΄νμΌλ¬κ° Longμμ μΆλ‘ ν΄μ μ€λ₯κ° λ°μνμ§ μλλ€.
- λ¬Έμμ΄ νμ
μ Stringμ΄λ©°, μλ°μ λμΌνλ€.
- λ¬Έμμ΄ λ¦¬ν°λ΄μ νμ©νλ©΄, κ°ν λ¬Έμκ° ν¬ν¨λ λ¬Έμμ΄μ \nμ μ¬μ©νμ§ μκ³ """κ³Ό """ μ¬μ΄μ κ°μ λ£μ΄ κ·Έλλ‘ λ¬Έμλ₯Ό μΆλ ₯ν μλ μλ€.
val s = """
μλ
νμΈμ
λλ°
"""
- μΆκ°μ μΌλ‘ trimMargin("")μ νμ©νλ©΄, μ¬λ°± μ κ±°λ₯Ό λνλ΄λ λ¬Έμλ₯Ό λ겨주μ΄μ ν΄λΉ λ¬Έμλ₯Ό μ κ±°ν΄μ€ μ μλ€.
- λ³μ μ΄λ¦ μμ $λ₯Ό λΆμ¬μ λ¬Έμμ΄ ν
νλ¦Ώμ λ§λ€ μ μλ€.
- λ°°μ΄κ³Ό ννμμ κ²½μ°, ${args[0]}, ${x+y}μ²λΌ μλ€λ‘ μ€κ΄νΈλ₯Ό λΆμΈλ€.
- $λ₯Ό μΌλ° λ¬Έμμ²λΌ λ§λ€κ³ μΆλ€λ©΄ \μ λΆμ¬μ£Όλ©΄ λλ€.
- λ°°μ΄μ Array ν΄λμ€λ‘ μ μλμ΄ μμΌλ©°, μ λ€λ¦μ μ¬μ©ν΄μ λνλΌ μ μλ€.
- arrayOf()λ₯Ό μ¬μ©ν΄μ κ°λ¨νκ² λ°°μ΄μ μμ±ν μ μλ€. μ΄λ, μ΄κΈ°κ°μ κΈ°μ€μΌλ‘ ν΄λΉ λ°°μ΄μ νμ
μ μ»΄νμΌλ¬κ° μΆλ‘ ν μ μλ€.
- arrayOfNulls()λ₯Ό νμ©νλ©΄ nullμ νμ©νλλ‘ λ§λ€ μ μλ€.
- νΉμ μμ±μμ λλ€μμ νμ©νμ¬ μμ±ν μ μλ€.
val a = Array<String>(2, {i -> {i * i.toString()}) // λ΄λΆμ κ΄νΈλ μ κ±° κ°λ₯νλ€.
- λν, λ°°μ΄ λ΄λΆμ μΌλ‘λ ν΄λΉ νμ
μ μΈμ€ν΄μ€λ₯Ό μ μ₯νκΈ° λλ¬Έμ, μμ κ°μκ° λ§μΌλ©΄ λ©λͺ¨λ¦¬ λλΉκ° λ°μν μλ μλ€.
- κ·Έλμ, κΈ°λ³Έ νμ
μ μμλ₯Ό μ μ₯νλ λ°°μ΄μ λ³λμ ν΄λμ€λ‘ κ°μ§κ³ μλ€. (ex. IntArray, ByteArray...)
- μ»΄νμΌλ¬κ° JVMμ κΈ°λ³Έ νμ
λ°°μ΄λ‘ λ³νν΄μ£ΌκΈ° λλ¬Έμ, λΆνμν κ°μ²΄ μμ±μ λ§μ μ μλ€.
- λ€μ°¨μ λ°°μ΄μ μ΄λ° μμΌλ‘ μμ±ν μ μλ€. (arrayOf μ¬μ©ν΄λ λλ€.)
val intArr = Array(2) {Array(3, {i -> 0})}
- λ€μ°¨μ λ°°μ΄μ μμ νμμ λ€μκ³Ό κ°μ΄ λ°λ³΅λ¬Έμ λλ©° μ§νν μ μλ€.
for (x in 0.. row-1) {
for (y in 0..col - 1) {
...
}
}
- μ½νλ¦°μ κΈ°λ³Έ ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ AnyλΌλ μ΄λ¦μ μνΌ ν΄λμ€λ₯Ό μμλ°κ² λμ΄ μλ€.
- λ³μ νμ
μ Anyλ‘ μ§μ νλ©΄ nullμ΄ μλ μ΄λ€ κ°λ μ μ₯ν μ μμΌλ©°, μ΄λ€ κ°μ²΄λ μ°Έμ‘°ν μ μλ€.
- λ΄λΆμ μΌλ‘ μ°μ°μλ₯Ό μ€λ²λ‘λ©ν ν¨μλ₯Ό μ¬μ©ν΄μ μ°μ°μ μ²λ¦¬νλ€.
- a + bλ₯Ό μ²λ¦¬νλ€λ©΄, λ΄λΆμ μΌλ‘ a.plus(b)λ₯Ό μννλλ‘ λ³ννλ€.
- κ·Έλμ 컀μ€ν
κ°μ²΄μ λ§μ
μ μ§νν λλ plus λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ£Όλ©΄ λλ€.
- λν, 컬λ μ
μ μ¬μ©ν λλ in μ°μ°μλ₯Ό ν΅ν΄ λ΄λΆ μμλ€μ μ½κ² μ κ·Όν μ μλ€.
a in b
- if-else λμ μ whenμ μ¬μ©ν΄μ 쑰건μμ μ²λ¦¬ν μλ μλ€.
- whenμ λ΄λΆμμλ κ° -> μ€ν μ½λ λΈλ‘μ ννλ‘ μμ±νλ€.
when(option) {
1 -> println("1")
2 -> println("2")
else -> {
println("other")
}
}
βοΈ λ°μ΄ν° ν΄λμ€
- λ°μ΄ν° ν΄λμ€λ₯Ό μ¬μ©νλ©΄ equals, hashCode, toString, copy κ°μ ν¨μλ₯Ό μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±ν΄μ€λ€.
- ν΄λμ€ μ΄λ¦ λ€μ, κ΄νΈ μμ λ°μ΄ν° ν΄λμ€μ μμ±μ μ μν΄μ€ μ μλ€.
data class Crew (val a : String, val b : Int) {
...
}
'βοΈ > Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] μ½νλ¦° κΈ°λ³Έ λ¬Έλ² μ 리 - Data Class, Companion Object, lateInit, val vs var (0) | 2022.10.22 |
---|