#1 λ©μλ μ€λ²λ‘λ© (Method overloading)
class Calculator {
// μ μν λ κ°λ₯Ό λνλ λ©μλ
fun add(x: Int, y: Int): Int {
return x + y
}
// μ€μν λ κ°λ₯Ό λνλ λ©μλ
fun add(x: Double, y: Double): Double {
return x + y
}
}
fun main() {
val calculator = Calculator()
// μ μν λ§μ
val result1 = calculator.add(3, 4)
println("Result of integer addition: $result1") // μΆλ ₯ κ²°κ³Ό: 7
// μ€μν λ§μ
val result2 = calculator.add(2.5, 3.5)
println("Result of double addition: $result2") // μΆλ ₯ κ²°κ³Ό: 6.0
}
λ©μλμ μ μΈλΆμ λͺ
μλλ 맀κ°λ³μμ 리μ€νΈλ₯Ό λ©μλ μκ·Έλμ²(Method signature)λΌκ³ νλ€. λ©μλ μ€λ²λ‘λ©μ μ΄λ¦μ΄ κ°μ§λ§ λ©μλ μκ·Έλμ²κ° λ€λ₯Έ λ©μλλ€μ κ°κ° μλ‘ λ€λ₯Έ λ©μλλ‘ μ·¨κΈνλ νλ‘κ·Έλλ° κΈ°λ²μ΄λ€.
#2 μ°μ°μ μ€λ²λ‘λ© (Operator overloading)
#2-1 κ°λ
λ©μλ μ€λ²λ‘λ©μ΄ 'λ©μλλ₯Ό μ€λ³΅ν΄μ μ μ'μ΄λΌλ©΄, μ°μ°μ(Operator) μ€λ²λ‘λ©μ 'μ°μ°μλ₯Ό μ€λ³΅ν΄μ μ μ'λ€. μ°μ°μλ μλ₯Ό λ€λ©΄ -1, 2 + 2, 4* 7 λ±μ μμμ μλ μ°μ°μ κΈ°νΈλ€μ λ§νλ€.
λ©μλ μ€λ²λ‘λ©μμ λ©μλλ₯Ό ꡬλΆνλ ν΅μ¬μ 'λ©μλ μκ·Έλμ²'μλ€. μ°μ°μ μ€λ²λ‘λ©μλ μ΄λ₯Έλ° 'μ°μ°μ μκ·Έλμ²'μ μν μ μννλ 무μΈκ°κ° μμκΉ? 그건 λ°λ‘ νΌμ°μ°μ(Operation)λ€. μλ₯Ό λ€μ΄, 71 - 16μμ μ°μ°μλ λ§μ΄λμ€ κΈ°νΈκ³ νΌμ°μ°μλ Intλ€. "ꡬꡬ" + "μ½"μμ μ°μ°μλ νλ¬μ€ κΈ°νΈκ³ , νΌμ°μ°μλ Stringμ΄λ€.
#2-2 λ¬Έλ²
// report card: μ±μ ν
class ReportCard(val name: String, val score: Int) {
operator fun plus(increment: Int): ReportCard {
return ReportCard(name, score + increment)
}
// 'μ°μ°μ μ€λ²λ‘λ©'μ 'λ©μλ μ€λ²λ‘λ©'ν¨
operator fun plus(reportCard: ReportCard): ReportCard {
return ReportCard(name + "μ(κ³Ό) " + reportCard.name, score + reportCard.score)
}
operator fun minus(decrement: Int): ReportCard {
return ReportCard(name, score - decrement)
}
// Kotlin λ΄ λͺ¨λ ν΄λμ€μ μ΅μμ ν΄λμ€μΈ Any ν΄λμ€μ λ©μλ equals()λ₯Ό override
override operator fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as ReportCard
if (name != other.name) return false
if (score != other.score) return false
return true
}
override fun hashCode(): Int {
var result = name.hashCode()
result = 31 * result + score
return result
}
}
fun main() {
var s1 = ReportCard("μ² μ", 100)
s1 = s1 - 50 + ReportCard("μν¬", 200)
if (s1 == ReportCard("μ² μμ(κ³Ό) μν¬", 250)) {
println("${s1.name}μ μ μλ ${s1.score}μ ") // μΆλ ₯ κ²°κ³Ό: μ² μμ(κ³Ό) μν¬μ μ μλ 250μ
}
}
μΈν°νμ΄μ€λ ν΄λμ€μμ, ν¨μ ν€μλμΈ fun μμ operator ν€μλλ₯Ό λ¬μμ£Όλ©΄ λλ€. λ¨, operatorλ λͺλͺ μ§μ λ μ΄λ¦μ ν¨μμλ§ λΆμΌ μ μλ€. λ§ κ·Έλλ‘ μ°μ°μλ₯Ό μ€λ²λ‘λ©νλ κ²μ΄κΈ° λλ¬Έμ, νλ‘κ·Έλλ¨Έλ€ μ¬μ΄μμ λͺ
μμ μΌλ‘ ν©μλ μ°μ°μμ μ΄λ¦λ€μ μ ν΄λμλ€. κ·Έ μ ν΄μ§ μ΄λ¦μ κ°μ§ μμ μμλ§ operator ν€μλλ₯Ό λΆμΌ μ μλ€. μ¬λ΄μΌλ‘, Any.equal()μ overrideν λλ Any.hashCode()λ κ°μ΄ overrideν΄μ£Όμ΄μΌ νλ€κ³ νλ€.
λ€μμ operator ν€μλλ₯Ό λΆμΌ μ μλ ν¨μμ μ΄λ¦κ³Ό κ·Έ μν μ΄λ€.
#3 operator ν€μλμ© ν¨μ
#3-1 μΌλ°μ μΈ ν¨μ
Operator overloading | Kotlin
kotlinlang.org
μ λ§ν¬μμ #2-2μ μ½λμ κ°μ μΌλ°μ μ΄κ³ κΈ°λ³Έμ μΈ operatorμ© ν¨μ μ΄λ¦μ μ°Ύμ μ μλ€.
#3-2 invoke()
interface Calculator {
operator fun invoke(x: Int, y: Int): Int
operator fun invoke(x: Double, y: Double): Double
}
class AddCalculator : Calculator {
override operator fun invoke(x: Int, y: Int): Int {
return x + y
}
override operator fun invoke(x: Double, y: Double): Double {
return x + y
}
}
fun main() {
val calculator: Calculator = AddCalculator()
val resultInt = calculator(3, 5)
println("λ΅μ $resultInt") // λ΅μ 8
val resultDouble = calculator(3.5, 5.5)
println("λ΅μ $resultDouble") // λ΅μ 9.0
}
μ΄μ κ°μ΄ () μ°μ°μμ λμλ overrideν μ μλ€. ν΄λΉ λμμ ν΄λΉνλ ν¨μ μ΄λ¦μ μμ΄λ‘ 'νΈμΆνλ€'λΌλ μλ―Έλ₯Ό μ§λ invokeλ€.
#3-3 get(), set()
class DataContainer {
private val data = mutableMapOf<String, Any>()
operator fun get(key: String): Any? {
return data[key]
}
operator fun set(key: String, value: Any) {
data[key] = value
}
}
fun main() {
val container = DataContainer()
// set() μ°μ°μ μ€λ²λ‘λ© μ¬μ©
container["name"] = "μ² μ"
container["age"] = 25
// get() μ°μ°μ μ€λ²λ‘λ© μ¬μ©
val name = container["name"]
val age = container["age"]
println("μ΄λ¦μ $name(μ΄)κ³ λμ΄λ $age") // μΆλ ₯ κ²°κ³Ό: μ΄λ¦μ μ² μ(μ΄)κ³ λμ΄λ 25
}
Arrayμ μ΄λ€ μμμ μ κ·Όν λ μ°λ λκ΄νΈ κΈ°νΈλ μ°μ°μλ€. κ·Έλ κΈ°μ μ°μ°μ μ€λ²λ‘λ©μ΄ κ°λ₯νλ€.
#3-4 getValue(), setValue()
[Kotlin] μμ νλ‘νΌν°(Delegated properties)
#1 Delegated properties#1-1 κ°μ Delegated properties | Kotlin kotlinlang.orgμμ νλ‘νΌν°λ, getterμ setter λ‘μ§μ λ€λ₯Έ κ°μ²΄μ μμ(delegate)νλ μ½νλ¦° νλ‘νΌν°λ₯Ό μλ―Ένλ€. λ³Έ κ²μκΈμμλ μμ νλ‘νΌν°
kenel.tistory.com
getValue()μ setValue()λ μμ νλ‘νΌν°(Delegated properties) μ μ© μ°μ°μλ€. μ κ²μκΈμμ μ 리νλ€.
#4 μμ½
μ°μ°μ μ€λ²λ‘λ©μΌλ‘ μ¬μ©μ μ μ ν΄λμ€λ₯Ό μ μ°νκ³ μ°μνκ² μ¬μ©νλ€.
'κΉ¨μ κ°λ π > Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] λλ€(Lambda) ννμ (0) | 2024.02.01 |
---|---|
[Kotlin] ν¨μ νμ (Fuction types) ννμ (0) | 2024.01.31 |
[Kotlin] ν¨μν μΈν°νμ΄μ€ (Single Abstract Method Interface) (0) | 2024.01.30 |
[Kotlin] νλ‘νΌν°(Property) (0) | 2024.01.17 |
[Kotlin] νμ₯ ν¨μ(Extension functions) (0) | 2023.12.16 |