본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 11. 연산자 오버로딩

by 김마리님 2020. 12. 7.

자바는 연산자 오버로딩을 제공하지 않는다. 그러나 코틀린은 연산자 오버로딩을 지원한다.

자주 쓰는 다섯개의 연산 기호만 대표적으로 본다.

 

+ 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