BackEnd/Kotlin
4강. 코틀린에서 연산자를 다루는 방법
hanseom
2024. 1. 31. 22:00
반응형
- 단항 연산자 / 산술 연산자
- 비교 연산자와 동등성, 동일성
- 논리 연산자 / 코틀린에 있는 특이한 연산자
- 연산자 오버로딩
단항 연산자 / 산술 연산자
Java와 Kotlin 완전 동일합니다.
- 단항 연산자: ++, --
- 산술 연산자: +, -, *, /, %
- 산술대입 연산자: +=, -=, *=, /=, %=
비교 연산자와 동등성, 동일성
Java와 Kotlin 완전 동일합니다.
- 비교 연산자: >, <, >=, <=
단, Kotlin은 Java와 다르게 객체를 비교할 때 비교 연산자를 사용하면 자동으로 compareTo를 호출해 줍니다.
다음은 compareTo를 구현한 JavaMoney 클래스입니다.
package com.lannstark.lec04;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
public class JavaMoney implements Comparable<JavaMoney> {
private final long amount;
public JavaMoney(long amount) {
this.amount = amount;
}
public JavaMoney plus(JavaMoney other) {
return new JavaMoney(this.amount + other.amount);
}
@Override
public int compareTo(@NotNull JavaMoney o) {
return Long.compare(this.amount, o.amount);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
JavaMoney javaMoney = (JavaMoney) o;
return amount == javaMoney.amount;
}
@Override
public int hashCode() {
return Objects.hash(amount);
}
@Override
public String toString() {
return "JavaMoney{" +
"amount=" + amount +
'}';
}
}
Java에서는 두 객체를 비교하기 위해 다음과 같이 구현합니다.
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(2_000L);
JavaMoney money2 = new JavaMoney(1_000L);
if (money1.compareTo(money2) > 0) {
System.out.println("Money1이 Money2보다 금액이 큽니다.");
}
}
}
Kotlin에서는 비교 연산자 사용 시 자동으로 compareTo를 호출해 줍니다.
fun main() {
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)
if (money1 > money2) {
println("Money1이 Money2보다 금액이 큽니다.")
}
}
동등성(Equality)
- 두 객체의 값이 같은가 입니다.
- Java에서 equals 를 사용합니다.
- Kotlin에서는 == 를 사용합니다. == 를 사용하면 간접적으로 equals를 호출합니다.
동일성(Identity)
- 완전히 동일한 객체인지, 즉 주소가 같은지 입니다.
- Java에서 == 를 사용합니다.
- Kotlin에서는 === 를 사용합니다.
val money3 = JavaMoney(1_000L)
val money4 = money3
val money5 = JavaMoney(1_000L)
println(money3 === money4) // 동일성
println(money3 == money5) // 동등성
논리 연산자 / 코틀린에 있는 특이한 연산자
Java와 Kotlin 완전 동일합니다. Java처럼 Lazy 연산을 수행합니다.
- 논리 연산자: AND(&&), OR(||), NOT(!)
fun main() {
// Lazy 연산
if (fun1() || fun2()) {
println("fun1()이 true면 fun2()는 수행되지 않습니다.")
}
}
fun fun1(): Boolean {
return true
}
fun fun2(): Boolean {
return false
}
코틀린에 있는 특이한 연산자
- in / !in: 컬렉션이나 범위에 포함되어 있거나 포함되어 있지 않을 때 사용합니다.
- a..b: a부터 b 까지의 범위 객체를 생성할 때 사용합니다.
- a[i]: a에서 특정 Index i로 값을 가져옵니다.
- a[i] = b: a의 특정 index i에 b를 넣습니다.
연산자 오버로딩
Kotlin에서는 객체마다 연산자를 직접 정의할 수 있습니다.
class Money(val amount: Long) {
operator fun plus(other: Money): Money {
return Money(this.amount + other.amount)
}
override fun toString(): String {
return "Money(amount=$amount)"
}
}
fun main() {
... 생략 ...
// 연산자 오버로딩
val money6 = Money(1_000L)
val money7 = Money(2_000L)
println(money6 + money7) // money6.plus(money7)
}
감사합니다.
반응형