References: Do it! 코틀린 프로그래밍

코틀린에서 연산자를 오버 로딩하는 법에 대해 알아봅니다.

오버 로딩에 대한 내용은 여기서 확인해 주세요.

 

 

1. 연산자 오버 로딩

 

말 그대로 오버 로딩을 연산자에 적용하는 것을 말합니다.

사실 코틀린에선 이미 여러 연산자가 많이 오버 로딩되어 있습니다.

 

'+'를 예시로 살펴보겠습니다.

지금까지 +연산을 직접 구현한 적이 있나요?

사실 A + B는 A.plus(B)와 같습니다. A와 B엔 다양한 자료형이 올 수 있습니다.

코틀린은 편의를 위해 이미 여러 자료형에 대해 오버 로딩을 구현해 두었습니다.

Byte, Short, Int, Long, Float, Double, Any 등 이미 오버 로딩된 '+'를 바로 사용할 수 있습니다.

 

만약 사용자가 정의한 객체에 대해 '+'연산을 수행하고 싶으면 어떻게 해야 할까요?

이런 경우에 연산장 오버 로딩이 필요합니다.

다음 예시를 통해 직접 정의한 클래스에 대해 연산자 오버 로딩을 해 봅시다.

 

class Point(var x: Int = 0, var y: Int = 0) {
    operator fun plus(p: Point): Point { return Point( x + p.x, y + p.y) }
}
fun main() {
    val p1 = Point(3, -8)
    val p2 = Point(2, 9)
    var point = Point()
    point = p1 + p2
    println("point = (${point.x}, ${point.y})")
}

 

Point 클래스에 대해서 plus 연산자를 오버 로딩하였습니다.

위의 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

 

* 연산자의 종류

  • a + b = a.plus(b)
  • a - b = a.minus(b)
  • a * b = a.times(b)
  • a / b = a.div(b)
  • a % b = a.rem(b)
  • a .. b = a.rangeTo(b)
  • ...

 

 

 

반응형

'Programming' 카테고리의 다른 글

[SPA] Single Page Application  (0) 2019.10.04
[Kotlin] 37. 제네릭  (0) 2019.09.17
[Kotlin] 35. 어노테이션 클래스  (0) 2019.09.16
[Kotlin] 34. 봉인 클래스와 열거형 클래스  (0) 2019.09.16
[Kotlin] 33. 내부 클래스  (0) 2019.09.16

+ Recent posts