-
4강. 코틀린에서 연산자를 다루는 방법BackEnd/Kotlin 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) }
감사합니다.
반응형'BackEnd > Kotlin' 카테고리의 다른 글
6강. 코틀린에서 반복문을 다루는 방법 (0) 2024.02.05 5강. 코틀린에서 조건문을 다루는 방법 (1) 2024.02.04 3강. 코틀린에서 Type을 다루는 방법 (0) 2024.01.30 2강. 코틀린에서 null을 다루는 방법 (0) 2024.01.27 1강. 코틀린에서 변수를 다루는 방법 (0) 2024.01.27