반응형
연산자를 다루는 방법
단항 연산자, 산술 연산자
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)
- 코틀린에서는 객체마다 연산자를 직접 정의할 수 있다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 예외를 다루는 방법 (0) | 2022.07.06 |
---|---|
[Kotlin] 반복문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 조건문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] Type을 다루는 방법 (0) | 2022.07.05 |
[Kotlin] null을 다루는 방법 (0) | 2022.07.05 |
[Kotlin] 코틀린에서의 변수 (0) | 2022.07.05 |