π‘ Kotlinμμ κ°μ²΄μ μνλ₯Ό λ³κ²½ν μ μλμ§ μ¬λΆλ₯Ό λνλ΄λ λΆλ³μ±κ³Ό κ°λ³μ±μ λνμ¬ νμ΅νμμ΅λλ€.
λΆλ³μ± (Immutability)
- λΆλ³ κ°μ²΄λ μμ±λ μ΄νμ μνλ₯Ό λ³κ²½ν μ μλ κ°μ²΄μ λλ€.
- μ΄λ¬ν κ°μ²΄λ μμ±ν λ κ°μ μ€μ νκ³ , μ΄νμλ κ°μ λ³κ²½ν μ μμ΅λλ€.
- Kotlinμμλ val ν€μλλ₯Ό μ¬μ©νμ¬ λΆλ³ λ³μλ₯Ό μ μΈν©λλ€.
- Kotlinμ ν¨μν νλ‘κ·Έλλ°μ μ§μνλ μΈμ΄λ‘, λΆλ³μ±μ μ¬μ©μ κΆμ₯νκ³ μμ΅λλ€.
λΆλ³μ±μ μ€μμ±
- λΆλ³ κ°μ²΄λ μμ± μμ μ΄ν ν λ² μ μλ μνλ κ³μ μ μ§νλ©° λ³κ²½λμ§ μμΌλ―λ‘ μ€λ λ κ° μμ μ±μ 보μ₯νλ©°, μ΄λ₯Ό ν΅ν΄ λκΈ°ν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
- λν ν λ² μμ±ν κ°μ λ³κ²½λμ§ μμΌλ―λ‘ μΊμλ μμν©λλ€.
- κΈ°μ‘΄ κ°μ²΄μμ νλ‘νΌν°κ° λ³κ²½λ κ°μ²΄λ₯Ό λ¦¬ν΄ λ°κ³ μ ν λ λ°©μ΄μ 볡μ¬λ₯Ό νμ§ μμλ λλ€λ μ₯μ μ΄ μμ΅λλ€.
- λ°©μ΄μ λ³΅μ¬ : κ°μ²΄μ λΆλ³μ±μ 보μ₯νκ³ , μΈλΆμμ κ°μ²΄μ μνλ₯Ό λ³κ²½νμ§ λͺ»νλλ‘ λ³΅μ¬λ³Έμ μ 곡νλ κΈ°λ²
data class Person(val name: String, val birthDate: Date)
class PersonManager {
private val birthDate = Date()
fun getBirthDate(): Date {
return Date(birthDate.time) // λ°©μ΄μ 볡μ¬λ³Έμ λ°ν
}
}
fun main() {
val manager = PersonManager()
val birthDate = manager.getBirthDate()
birthDate.time = 0 // μΈλΆ μ½λμμ birthDateλ₯Ό λ³κ²½ν΄λ PersonManager λ΄λΆμ birthDateλ λ³κ²½λμ§ μμ
}
- λ°©μ΄μ 볡μ¬μ μ₯μ
- κ°μ²΄μ λΆλ³μ±μ μ μ§ν μ μμΌλ©°, μμ μ±κ³Ό μ½λ μμΈ‘ κ°λ₯μ±μ ν₯μ μν΅λλ€.
- 무결μ±μ μ μ§νκ³ μΈλΆ μ½λλ‘λΆν° κ°μ²΄μ μν λ³κ²½μ λ°©μ§νκΈ° μν μ€μν κΈ°λ²μ λλ€.
- λ°©μ΄μ 볡μ¬μ λ¨μ
- μ±λ₯μ μ νμν€κ³ , μ½λλ₯Ό 볡μ‘νκ² λ§λ λ€λ λ¨μ μ κ°μ§κ³ μμ΅λλ€.
κ°λ³μ± (Mutability)
- λΆλ³μ±κ³Ό λ°λλ‘ λ³κ²½ κ°λ₯ν μνλ₯Ό κ°μ§λ κ²½μ°λ₯Ό κ°λ³μ±μ΄λΌκ³ ν©λλ€.
- 무λΆλ³ν μνκ° λ³κ²½λλ κ²½μ°κ° λ°μνλ©°, μλμ κ°μ λ¬Έμ μ μ΄ μκΉλλ€.
- λ©ν°μ€λ λμμ κ°μ 보μ₯νμ§ λͺ»ν¨
- μμΈ‘μ΄ μ΄λ ΅κ³ λ³κ²½μ μνν¨
- ν μ€νΈμ λλ²κΉ μ΄ μ΄λ €μ
Kotlinμμ κ°λ³μ±μ μ ννλ λ°©λ²
- μ½νλ¦°μμλ 3κ°μ§ κ°λ³μ± μ ν λ°©λ²μ μ μν©λλ€.
- μ½κΈ° μ μ© νλ‘νΌν°μΈ val ν€μλ μ¬μ©
- Mutable 컬λ μ
κ³Ό read-only 컬λ μ
μ ꡬλΆ
- Mutable 컬λ μ : MutableList, MutableSet, MutableMap..
- read-only 컬λ μ : List, Set, Map..
- data classμ copy() μ§μ
copy() νμ©
data class User(
val name: String,
val tag: Int,
}
fun main() {
val user = User("jinwoo",1001)
val user_copy = user.copy(name = "jinwoo_copy")
}
- data classμμ copyλ₯Ό νμ©νλ©΄, κΈ°μ‘΄ κ°μ²΄μ κ°μ λ³κ²½νμ§ μκ³ νλ‘νΌν°λ₯Ό λ³κ²½νμ¬ μλ‘μ΄ κ°μ ν λΉν μ μμ΅λλ€.
- λ΄μ₯ ν¨μμΈ hashCode()λ₯Ό νμ©νλ©΄, λ κ°μ²΄κ° λ€λ₯Έ κ°μ μ°Έμ‘°νκ³ μλ κ²μ μ μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄μ λΆλ³μ±μ μ μ§ν μ μμ΅λλ€.