μ½νλ¦° (Kotlin)μ΄λ 무μμΈκ°?
μ½νλ¦°μ μλ° νλ«νΌμμ λμκ°λ μλ‘μ΄ νλ‘κ·Έλλ° μΈμ΄μ΄λ€.
μ½νλ¦°μ κ°κ²°νκ³ μ€μ©μ μ΄λ©°, μλ° μ½λμμ μνΈμ΄μ©μ±μ μ€μνλ€.
νμ¬ μλ°κ° μ¬μ© μ€μΈ κ³³μ΄λΌλ©΄ κ±°μ λλΆλΆ μ½νλ¦°μ νμ©ν μ μλ€.
λνμ μΌλ‘ μλ² κ°λ°, μλλ‘μ΄λ μ± κ°λ° λ±μ λΆμΌμμ μ½νλ¦°μ μΈ μ μλ€.
μ½νλ¦° λ§λ³΄κΈ°
nameκ³Ό ageλΌλ νλ‘νΌν°κ° λ€μ΄κ° κ°λ¨ν λ°μ΄ν° ν΄λμ€(data calss)λ₯Ό μ μνλ€.
age νλ‘νΌν°μ λν΄νΈ κ°μ (λ°λ‘ μ§μ νμ§ μμ κ²½μ°) nullμ΄λ€.
maxBy ν¨μμμ μλΉμ€ μ°μ°μλΌκ³ λΆλ₯΄λ ?: λ ageκ° nullμΈ κ²½μ° 0μ λ°ννκ³ , κ·Έλ μ§ μμ κ²½μ° ageμ κ°μ λ°ννλ€.
data class Person(val name: String, val age: Int ?= null)
fun main(args:Array<String>){
val person = listOf(Person("μν¬"), Person("μ² μ", age=29))
val oldest = person.maxBy { it.age ?: 0 }
print(oldest)
}
/* μ€νκ²°κ³Ό
Person(name=μ² μ, age=29)
*/
μ½νλ¦° λμ νλ«νΌ
μλ°κ° μ€νλλ λͺ¨λ κ³³μ΄λΌκ³ λ³Ό μ μλ€.
μ½νλ¦°μ μ£Όλͺ©μ μ νμ¬ μλ°κ° μ¬μ©λκ³ μλ λͺ¨λ μ©λμ μ ν©νλ©΄μλ κ°κ²°νκ³ μμ°μ μ΄λ©° μμ ν λ체 μΈμ΄λ₯Ό μ 곡νλ κ²μ΄λ€.
- μλ²μμ μ½λ (νΉν μΉ μ ν리μΌμ΄μ μ λ°±μλ)
- μλλ‘μ΄λ λλ°μ΄μ€μμ μ€νλλ λͺ¨λ μ ν리μΌμ΄μ
νμ§λ§ μ½νλ¦°μ λ€λ₯Έ νκ²½μμλ μ μλνλ€.
μλ₯Ό λ€μ΄ μΈν μ λ©ν° OS μμ§μ μ¬μ©νλ©΄ μ½νλ¦°μ iOS λλ°μ΄μ€μμ μ€νν μ μλ€. μ΄ λ°μλ μλ°μ€ν¬λ¦½νΈλ₯Ό 곡μμ μΌλ‘ μ§μλ λ± λ€λ₯Έ νκ²½μμλ μλ κ°λ₯νκ² λ§λ€ μ μλ€.
μ μ νμ μ§μ μΈμ΄ vs λμ νμ μ§μ μΈμ΄
μ μ νμ μ§μ μΈμ΄
μ μ νμ μ§μ μ΄λΌλ λ§μ λͺ¨λ νλ‘κ·Έλ¨ κ΅¬μ± μμμ νμ μ μ»΄νμΌ μμ μ μ μ μκ³ νλ‘κ·Έλ¨ μμμ κ°μ²΄μ νλλ λ©μλλ₯Ό μ¬μ©ν λλ§λ€ μ»΄νμΌλ¬κ° νμ μ κ²μ¦ν΄μ€λ€λ λ»μ΄λ€.
μ μ νμ μ§μ μΈμ΄ μ₯μ
- μ±λ₯
μ€ν μμ μ μ΄λ€ λ©μλλ₯Ό νΈμΆν μ§ μμλ΄λ κ³Όμ μ΄ νμ μμΌλ―λ‘ λ©μλ νΈμΆμ΄ λ λΉ λ₯΄λ€. - μ λ’°μ±
μ»΄νμΌλ¬κ° νλ‘κ·Έλ¨μ μ νμ±μ κ²μ¦νκΈ° λλ¬Έμ μ€ν μ νλ‘κ·Έλ¨μ΄ μ€λ₯λ‘ μ€λ¨λ κ°λ₯μ±μ΄ λ μ μ΄μ§λ€. - μ μ§ λ³΄μμ±
μ½λμμ λ€λ£¨λ κ°μ²΄κ° μ΄λ€ νμ μ μνλμ§ μ μ μκΈ° λλ¬Έμ μ²μ 보λ μ½λλ₯Ό λ€λ£° λλ λ μ½λ€. - λꡬ μ§μ
μ μ νμ μ§μ μ νμ©νλ©΄ λ μμ νκ² λ¦¬ν©ν λ§ ν μ μκ³ , λꡬλ λ μ νν μ½λ μμ± κΈ°λ₯μ μ 곡ν μ μμΌλ©°, IDEμ λ€λ₯Έ μ§μ κΈ°λ₯λ λ μ λ§λ€ μ μλ€.
λμ νμ μ§μ μΈμ΄
λμ νμ μ§μ μΈμ΄μμλ νμ κ³Ό κ΄κ³μμ΄ λͺ¨λ κ°μ λ³μμ λ£μ μ μκ³ , λ©μλλ νλ μ κ·Όμ λν κ²μ¦μ΄ μ€ν μμ μ μΌμ΄λλ©°, κ·Έμ λ°λΌ μ½λκ° λ 짧μμ§κ³ λ°μ΄ν° ꡬ쑰λ₯Ό λ μ μ°νκ² μμ±νκ³ μ¬μ©ν μ μλ€.
νμ§λ§ λ°λλ‘ μ΄λ¦μ μλͺ» μ λ ₯νλ λ±μ μ€μλ‘ μ»΄νμΌ μ κ±Έλ¬λ΄μ§ λͺ»νκ³ μ€ν μμ μ μ€λ₯κ° λ°μνλ€.
μ½νλ¦°μ μ μ νμ μ§μ μΈμ΄μ΄λ€.
var a = 1
μ½νλ¦°μ μ΄ λ³μμ νμ μ΄ Intμμ μλμΌλ‘ μμλΈλ€. μ»΄νμΌλ¬κ° λ¬Έλ§₯μ κ³ λ €ν΄ λ³μ νμ μ κ²½μ νλ μ΄λ° κΈ°λ₯μ νμ μΆλ‘ (type interence)μ΄λΌκ³ λΆλ₯Έλ€.
ν¨μν νλ‘κ·Έλλ°
- μΌκΈ μλ―ΌμΈ ν¨μ
ν¨μ (νλ‘κ·Έλ¨μ νλμ λνλ΄λ μ½λ μ‘°κ°)λ₯Ό μΌλ° κ°μ²λΌ λ€λ£° μ μλ€.
ν¨μλ₯Ό λ³μμ μ μ₯ν μ μκ³ , ν¨μλ₯Ό μΈμλ‘ λ€λ₯Έ ν¨μμ μ λ¬ν μ μμΌλ©°, ν¨μμμ μλ‘μ΄ ν¨μλ₯Ό λ§λ€μ΄μ λ°νν μ μλ€. - λΆλ³μ±
ν¨μν νλ‘κ·Έλλ°μμλ μΌλ¨ λ§λ€μ΄μ§κ³ λλ©΄ λ΄λΆ μνκ° μ λλ‘ λ°λμ§ μλ λΆλ³ κ°μ²΄λ₯Ό μ¬μ©ν΄ νλ‘κ·Έλ¨μ μμ±νλ€. - λΆμ ν¨κ³Ό(side effect) μμ
ν¨μν νλ‘κ·Έλλ°μμλ μ λ ₯μ΄ κ°μΌλ©΄ νμ κ°μ μΆλ ₯μ λ΄λκ³ λ€λ₯Έ κ°μ²΄μ μνλ₯Ό λ³κ²½νμ§ μμΌλ©°, ν¨μ μΈλΆλ λ€λ₯Έ λ°κΉ₯ νκ²½κ³Ό μνΈμμ©νμ§ μλ μμ ν¨μλ₯Ό μ¬μ©νλ€.
μ΄λ° ν΅μ¬ κ°λ μ μ¬μ©νλ ν¨μν μ€νμΌλ‘ νλ‘κ·Έλ¨μ μμ±νλ©΄,
- κ°κ²°μ±
- λ€μ€ μ€λ λλ₯Ό μ¬μ©ν΄λ μμ
- ν μ€νΈνκΈ° μ½λ€.
μ½νλ¦°μ μ² νμ΄λΌ μ°κ³ μ₯μ μ΄λΌ μ½λλ€.
μ€μ©μ±
μ½νλ¦°μ μ€μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ§λ€μ΄μ§ μ€μ©μ μΈ μΈμ΄λ€. μ½νλ¦°μ μ°κ΅¬λ₯Ό μν μΈμ΄κ° μλλ€. λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄κ° μ±νν μ΄λ―Έ μ±κ³΅μ μΌλ‘ κ²μ¦λ ν΄λ²κ³Ό κΈ°λ₯μ μμ‘΄νλ€. μ΄λ‘ μΈν΄ μΈμ΄μ 볡μ‘λκ° μ€μ΄λ€κ³ μ΄λ―Έ μκ³ μλ κΈ°μ‘΄ κ°λ μ ν΅ν΄ μ½νλ¦°μ λ μ½κ² λ°°μΈ μ μλ€.
κ°κ²°μ±
κ°λ°μκ° μ½λλ₯Ό μλ‘ μμ±νλ μκ°λ³΄λ€ κΈ°μ‘΄ μ½λλ₯Ό μ½λ μκ°μ΄ λ κΈΈλ€λ μ¬μ€μ μ μλ €μ Έ μλ€.
ν° νλ‘μ νΈλ₯Ό μννλ νμ μν΄ μκ³ , νλ‘μ νΈμμ λ§λ€μ΄λΈ μννΈμ¨μ΄μ λ²κ·Έλ₯Ό μμ νλ€κ³ κ°μ ν λ,
μμ ν΄μΌλ§ νλ λΆλΆμ μμλ΄κΈ° μν΄ μμ²λ λ Έλ ₯μ ν΄μΌνλ€.
μ½λκ° λ κ°λ¨νκ³ κ°κ²°ν μλ‘ λ΄μ©μ νμ νκΈ°κ° λ μ½λ€. λλ¬Έμ μ΄λ€ μΈμ΄λ₯Ό μ¬μ©ν΄ μ½λλ₯Ό μμ±νκ³ κ·Έ μΈμ΄κ° μΌλ§λ κ°κ²°ν μΈμ΄μΈμ§λ μ€μνλ€.
μ΄λ€ μΈμ΄κ° κ°κ²°νλ€λ λ§μ κ·Έ μΈμ΄λ‘ μμ±λ μ½λλ₯Ό μ½μ λμλλ₯Ό μ½κ² νμ ν μ μλ ꡬ문 ꡬ쑰λ₯Ό μ 곡νκ³ , κ·Έ μλλ₯Ό λ¬μ±νλ λ°©λ²μ μ΄ν΄ν λ λ°©ν΄κ° λ μμλλΆκ°μ μΈ μ€λΉ μ½λκ° μ λ€λ λ»μ΄λ€.
μ½νλ¦° κ°μ κ²½μ°,
- κ²ν° getter, μΈν° setter, μμ±μ νλΌλ―Έν°
- λλ€ μ§μ
- μΌλ°μ μΈ κΈ°λ₯ λΌμ΄λΈλ¬λ¦¬ μΊ‘μν
νλμ λμ νκΈ° μν λ‘μ§ λ± μλ°μ μ‘΄μ¬νλ μ¬λ¬ κ°μ§ λ²κ±°λ‘μ΄ μ€λΉ μ½λλ₯Ό μ½νλ¦°μ 묡μμ μΌλ‘ μ 곡νκΈ° λλ¬Έμ μ½νλ¦° μμ€μ½λλ κ·Έλ° μ€λΉ μ½λλ‘ μΈν΄ μ§μ λΆν΄μ§λ μΌμ΄ μλ€.
μμ μ±
μΌλ°μ μΌλ‘ νλ‘κ·Έλλ° μΈμ΄κ° μμ νλ€λ λ§μνλ‘κ·Έλ¨μμ λ°μν μ μλ μ€λ₯μ€μμ μΌλΆ μ νμ μ€λ₯λ₯Ό νλ‘κ·Έλ¨ μ€κ³κ° μμ²μ μΌλ‘ λ°©μ§ν΄μ€λ€λ λ»μ΄λ€.
μ½νλ¦°μ JVMμμ μ€ννλ€λ μ¬μ€μ μ΄λ―Έ μλΉν μμ μ±μ 보μ₯ν μ μλ€λ λ»μ΄λ€.
JVMμ μ¬μ©νλ©΄,
- λ©λͺ¨λ¦¬ μμ μ± λ³΄μ₯
- λ²νΌ μ€λ²νλ‘λ₯Ό λ°©μ§
- λμ μΌλ‘ ν λΉν λ©λͺ¨λ¦¬λ₯Ό μλͺ» μ¬μ©ν¨μΌλ‘ μΈν΄ λ°μν μ μλ λ€μν λ¬Έμ μλ°©
- JVMμμ μ€νλλ μ μ νμ μ§μ μΈμ΄λ‘ νμ μμ μ± λ³΄μ₯
λν, μ½νλ¦°μ μ€ν μμ μ μ€λ₯λ₯Ό λ°μμν€λ λμ μ»΄νμΌ μμ κ²μ¬λ₯Ό ν΅ν΄ μ€λ₯λ₯Ό λ λ§μ΄ λ°©μ§ν΄μ€λ€.
μ½νλ¦°μ νμ μμ€ν μ nullμ΄ λ μ μλ κ°μ μΆμ νλ©°, μ€ν μμ NullPinterExceptionμ΄ λ°μν μ μλ μ°μ°μ μ¬μ©νλ μ½λλ₯Ό κΈμ§νλ€.
// λμ΄ λ μ μμ
val s: String? = null
// λμ΄ λ μ μμ
val s2: String = ""
μνΈμ΄μ©μ±
μλ°μ λΌμ΄λΈλ¬λ¦¬κ° μ΄λ€ APIλ₯Ό μ 곡νλ κ°μ μ½νλ¦°μμ κ·Έ APIλ₯Ό νμ©ν μ μλ€. μ¦, μλ°μ½λμμ μ½νλ¦° μ½λλ₯Ό νΈμΆν λ μλ¬΄λ° λ Έλ ₯μ΄ νμ μλ€. μ΄μ λ°λΌμλ°μ μ½νλ¦° μ½λλ₯Ό νλ‘μ νΈμμ μνλ λλ‘ μμ΄ μΈ μ μλ κΆκ·Ήμ μΈ μ μ°μ±μ λ°νν μ μλ€.
μ½νλ¦° μ½λ μ»΄νμΌ κ³Όμ
μ½νλ¦° μ»΄νμΌλ¬λ μλ°μ»΄νμΌλ¬κ° μλ° μμ€μ½λλ₯Ό μ»΄νμΌν λμ λ§μ°¬κ°μ§λ‘ μ½νλ¦° μμ€μ½λλ₯Ό λΆμν΄μ .class νμΌμ λ§λ€μ΄λΈλ€.
λ§λ€μ΄μ§ .class νμΌμ κ°λ° μ€μΈ μ ν리μΌμ΄μ μ μ νμ λ§λ νμ€ ν¨ν€μ§ κ³Όμ μ κ±°μ³ μ€νλ μ μλ€.
μ½νλ¦°μ»΄νμΌλ¬λ‘ μ»΄νμΌν μ½λλ μ½νλ¦° λ°νμλΌμ΄λΈλ¬λ¦¬μ μμ‘΄νλ€. λ°νμ λΌμ΄λΈλ¬λ¦¬μλ μ½νλ¦° μ체 νμ€ λΌμ΄λΈλ¬λ¦¬ ν΄λμ€μ μ½νλ¦°μμ μλ° APIμ κΈ°λ₯μ νμ₯νλ΄μ©μ΄ λ€μ΄μλ€. μ½νλ¦°μΌλ‘ μ»΄νμΌν μ ν리μΌμ΄μ μ λ°°ν¬ν λλ λ°νμ λΌμ΄λΈλ¬λ¦¬λ ν¨κ» λ°°ν¬ν΄μΌ νλ€.
μ€μ λ‘ κ°λ°μ μ§ννλ€λ©΄ νλ‘μ νΈλ₯Ό μ»΄νμΌνκΈ° μν΄ λ©μ΄λΈ, κ·Έλ μ΄λ€, μ€νΈ λ±μ λΉλ μμ€ν μ μ¬μ©ν κ²μ΄λ€. μ½νλ¦°μ κ·Έλ° λΉλ μμ€ν κ³Ό νΈνλλ€.
μμ½
- μ½νλ¦°μ νμ μΆλ‘ μ μ§μνλ μ μ νμ μ§μ μΈμ΄λ€. λ°λΌμ μμ€μ½λμ μ νμ±κ³Ό μ±λ₯μ 보μ₯νλ©΄μλ μμ€μ½λλ₯Ό κ°κ²°νκ² μ μ§ν μ μλ€.
- μ½νλ¦°μ κ°μ²΄μ§ν₯κ³Ό ν¨μν νλ‘κ·Έλλ° μ€νμΌμ λͺ¨λ μ§μνλ€ μ½νλ¦°μμλ μΌκΈ μλ―Όν¨μλ₯Ό μ¬μ©ν΄ μμ€ λμ μΆμνκ° κ°λ₯νκ³ , λΆλ³ κ° μ§μμ ν΅ν΄ λ€μ€ μ€λ λ μ ν리μΌμ΄μ κ°λ°κ³Ό ν μ€νΈλ₯Ό λ μ½κ² ν μ μλ€.
- μ½νλ¦°μ μλλ‘μ΄λμλ νμ©ν μ μλ€. μ½νλ¦°μ λ°νμ λΌμ΄λΈλ¬λ¦¬λ ν¬κΈ°κ° μκ³ , μ½νλ¦° μ»΄νμΌλ¬λ μλλ‘μ΄λ APIλ₯Ό νΉλ³ν μ§μνλ€. κ·Έλ¦¬κ³ μ½νλ¦°μ λ€μν λΌμ΄λΈλ¬λ¦¬λ μλλ‘μ΄λμμ νν νλ μμ μ μ¬μ©ν μ μμΌλ©΄μ μ½νλ¦°κ³Ό μ ν΅ν©λ μ μλ ν¨μλ₯Ό μ 곡νλ€.
- μ½νλ¦°μ μ€μ©μ μ΄λ©° μμ νκ³ , κ°κ²°νλ©° μνΈμ΄μ©μ±μ΄ μ’λ€ μ΄λ μ½νλ¦°μ μ€κ³νλ©΄μ μΌλ°μ μΈ μμ μ λν΄ μ΄λ―Έ μ μλ €μ§ ν΄λ²μ μ±ννκ³ , NullPointerExceptionκ³Ό κ°μ΄ νν λ°μνλ μ€λ₯λ₯Ό λ°©μ§νλ©°, μ½κΈ° μ½κ³ κ°κ²°ν μ½λλ₯Ό μ§μνλ©΄μ μλ°μ μλ¬΄λ° μ μ½ μμ΄ ν΅ν©λ μ μλ μΈμ΄λ₯Ό λ§λλλ° μ΄μ μ λ§μ·λ€λ λ»μ΄λ€.
μ°Έκ³
[λμ] Kotlin in Action : μ½νλ¦° μ»΄νμΌλ¬ κ°λ°μκ° μ§μ μλ €μ£Όλ μ½νλ¦° μΈμ΄ ν΅μ¬
'π Development > Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ½νλ¦°] νλ‘νΌν° property λ?(κ²ν° getter & μΈν° setter) (0) | 2023.05.26 |
---|