728x90
7.1.1 이항 산술 연산자 오버로딩
1. 연산자를 오버로딩하는 함수 앞에는 꼭 operator가 있어야 함
식 | 함수 이름 |
a * b | times |
a / b | div |
a % b | mod(1.1부터 rem) |
a + b | plus |
a - b | minus |
2. operator 변경자를 추가해 plus 함수를 정의하면, + 기호로 덧셈이 가능
data class Point(val x: Int, val y: Int)
fun main(args: Array<String>) {
val point = Point(1, 3)
println(point.plus(point))
}
operator fun Point.plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
7.1.3 단항 연산자 오버로딩
1. 단항 연산자를 오버로딩하기 위해 사용하는 함수는 인자를 취하지 않음
식 | 함수 이름 |
+a | unaryPlus |
-a | unaryMinus |
!a | not |
++a, a++ | inc |
--a, a-- | dec |
data class Point(val x: Int, val y: Int)
fun main(args: Array<String>) {
val point = Point(1, 3)
println(-point)
}
operator fun Point.unaryMinus(): Point {
return Point(-x, -y)
}
import java.math.BigDecimal
operator fun BigDecimal.inc() = this + BigDecimal.ONE
fun main(args: Array<String>) {
var bd = BigDecimal.ZERO
println(bd++)
println(++bd)
}
7.3.1 인덱스로 원소에 접근: get과 set
data class Point(val x: Int, val y: Int)
fun main(args: Array<String>) {
val point = Point(10, 20)
println(point[1])
}
operator fun Point.get(index: Int): Int {
return when(index) {
0 -> x
1 -> y
else ->
throw IndexOutOfBoundsException("Invalid coordinate $index")
}
}
data class MutablePoint(var x: Int, var y: Int)
fun main(args: Array<String>) {
val point = MutablePoint(10, 20)
point[1] = 30
println(point)
}
operator fun MutablePoint.set(index: Int, value: Int) {
return when(index) {
0 -> x = value
1 -> y = value
else ->
throw IndexOutOfBoundsException("Invalid coordinate $index")
}
}
728x90
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Delegate Pattern 사용하기 (0) | 2022.12.14 |
---|---|
[코틀린 인 액션] 8장 정리: 고차 함수 (0) | 2022.12.13 |
[코틀린 인 액션] 6장 정리: null 다루는 방법 (0) | 2022.11.30 |
[코틀린 인 액션] 5장 정리 (0) | 2022.11.30 |
[코틀린 인 액션] 4장 정리 (0) | 2022.11.29 |