본문 바로가기
Java & Kotlin/Kotlin

[Kotlin] 연산자를 다루는 방법

by heekng 2022. 7. 5.
반응형

연산자를 다루는 방법

단항 연산자, 산술 연산자

public class JavaMoney implements Comparable<JavaMoney>{

    private final long amount;

    public JavaMoney(long amount) {
        this.amount = amount;
    }

    @Override
    public int compareTo(@NotNull JavaMoney o) {
        return Long.compare(this.amount, o.amount);
    }
}
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)

// compareTo를 자동 호출한다.
if (money1 > money2) {
    println("money1이 money2보다 금액이 큽니다.")
}
  • 단항 연산자(++, --), 산술 연산자(+, -, *, /, %), 산술 대입 연산자(+=, -=, *=, /=, %=) 모두 Java와 동일하다.
  • 비교연산자 (>, <, >=, <=)
    • 코틀린은 자바와 다르게 객체를 비교할 때 비교연산자를 사용하면 자동으로 compareTo를 호출한다.

비교 연산자와 동등성, 동일성

val money1 = JavaMoney(1_000L)
val money2 = money1
val money3 = JavaMoney(1_000L)

// 값을 비교
println(money1 == money2)
// 주솟값을 비교
println(money1 === money3)
  • 동등성(Equality): 두 객체의 값이 같은가?
  • 동일성(Identity): 완전히 동일한 객체인가? 즉, 주소가 같은가?
  • 자바에서는 동일성에 == 를 사용하고, 동등성에 equals를 직접 호출한다.
  • 하지만 코틀린에서는 동일성에 === 를 사용하고, 동등성에 == 를 사용한다.
    • ==를 사용하면 간접적으로 equals를 호출한다.

논리 연산자 / 코틀린에 있는 특이한 연산자

  • 논리연산자 (&&, ||, !)는 자바와 동일하며, Lazy 연산을 지원한다.
  • in, !in
    • 컬랙션이나 범위에 포함되어 있다, 포함되어 있지 않다.
    • 1 in numbers의 형태로 사용한다.
  • a..b
    • a부터 b까지의 범위 객체를 생성한다.
  • a[i]
    • a에서 특정 index i로 값을 가져온다.
  • a[i] = b
    • a의 특정 index i에 b를 넣는다.

연산자 오버로딩

// Money
data class Money (
        val amount: Long
){

    operator fun plus(other: Money): Money {
        return Money(this.amount + other.amount)
    }

}

// main
val money1 = Money(1_000L)
val money2 = Money(2_000L)
println(money1 + money2)
  • 코틀린에서는 객체마다 연산자를 직접 정의할 수 있다.
반응형