자바는 연산자 오버로딩을 제공하지 않는다. 그러나 코틀린은 연산자 오버로딩을 지원한다.
자주 쓰는 다섯개의 연산 기호만 대표적으로 본다.
+ | plus |
- | minus |
* | times |
/ | div |
% | rem |
그럼 왜 이런걸 할까?
연산 대상이 숫자가 아닐 경우 쓴다.
예시를 본다.
fun main(args: Array<String>): Unit {
val pt1 = Point(3, 7)
val pt2 = Point(2, -6)
val pt3 = pt1+pt2
val pt4 = pt3*6
val pt5 = pt4/3
pt3.print()
pt4.print()
pt5.print()
}
class Point(var x: Int = 0, var y: Int = 0) {
operator fun plus(other:Point) : Point {
return Point(x+other.x , y+other.y)
}
operator fun minus(other:Point) : Point {
return Point(x-other.x , y-other.y)
}
operator fun times(number : Int) : Point {
return Point(x*number, y*number)
}
operator fun div(number : Int) : Point {
return Point(x/number, y/number)
}
fun print(){
println("x : $x , y : $y")
}
}
보다시피 더하는 것은 실수가 아닌 Point 라는 다른 타입을 가졌음에도 plus, div, times을 다른 타입의 매개변수를 받아 오버로딩 통해 리턴값을 재정의할 수 있다.
x : 5 , y : 1
x : 30 , y : 6
x : 10 , y : 2
Process finished with exit code 0
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 13. invoke? (0) | 2020.12.07 |
---|---|
Kotlin] 12. 번호 붙은 접은 연산자 (0) | 2020.12.07 |
Kotlin] 10. getter, setter (0) | 2020.12.07 |
Kotlin] 9. 생성자 (0) | 2020.12.07 |
Kotlin] 8. 객체 (0) | 2020.12.04 |