본문 바로가기

# 미사용

11. 연산자 오버로딩

이 블로그의 모든 예제코드는 깃허브에서도 볼 수 있습니다.
    https://github.com/AeroCodeX/

연산자 변환


코틀린의 연산자는 바이트 코드로 변환될 때, 내부적인 메소드로 변환된다.

  • 이항 산술 연산자
ExpressionTranslated to
a + ba.plus(b)
a - ba.minus(b)
a * ba.times(b)
a / ba.div(b)
a % ba.rem(b)a.mod(b) (deprecated)
a..ba.rangeTo(b)
  • 단항 연산자

ExpressionTranslated to
+aa.unaryPlus()
-aa.unaryMinus()
!aa.not()
ExpressionTranslated to
a++a.inc() + see below
a--a.dec() + see below

  • 복합대입 연산자

ExpressionTranslated to
a += ba.plusAssign(b)
a -= ba.minusAssign(b)
a *= ba.timesAssign(b)
a /= ba.divAssign(b)
a %= ba.remAssign(b)a.modAssign(b) (deprecated)


  • 동등관계 연산자

ExpressionTranslated to
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: (b === null))

Note=== and !== (identity checks) are not overloadable, so no conventions exist for them.

=== 연산자나 !== 연산자는 오버로딩 할 수 없다.


ExpressionTranslated to
a > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.compareTo(b) <= 0

  • 컬렉션의 in 연산자

ExpressionTranslated to
a in bb.contains(a)
a !in b!b.contains(a)

For in and !in the procedure is the sam

  • 인덱스 연산자

ExpressionTranslated to
a[i]a.get(i)
a[i, j]a.get(i, j)
a[i_1, ..., i_n]a.get(i_1, ..., i_n)
a[i] = ba.set(i, b)
a[i, j] = ba.set(i, j, b)
a[i_1, ..., i_n] = ba.set(i_1, ..., i_n, b)
  • 인보크 연산자

ExpressionTranslated to
a()a.invoke()
a(i)a.invoke(i)
a(i, j)a.invoke(i, j)
a(i_1, ..., i_n)a.invoke(i_1, ..., i_n)

클래스의 인스턴스를 함수처럼 사용할 수 있게 해준다.


예제




'# 미사용' 카테고리의 다른 글

13. 외부 반복문 제어  (0) 2018.11.19
12. 예외처리  (0) 2018.11.19
10. 널 체크  (0) 2018.11.19
09. 상속, 추상 클래스, 인터페이스  (0) 2018.11.19
08. 클래스  (0) 2018.11.18