1. 단항 연산자 / 산술 연산자
자바와 코틀린 완전 동일하게 사용할 수 있습니다.
단항 연산자 | ++, -- |
산술 연산자 | +, 0, *, /, % |
산술 대입 연산자 | +=, -=, *=, /=, %= |
2. 비교 연산자
자바에서는 객체에 있는 값을 이용한 비교를 할 때 compareTo를 override로 구현하고 이를 호출해서 비교합니다.
아래 JavaMoney라는 객체가 있습니다.
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);
}
}
[Java]
JavaMoney에 있는 amount 값을 비교하는 코드를 확인해봅시다.
위에서 말했던것과 동일하게 자바에서는 compareTo를 호출해서 money 객체의 amount를 비교하고 있습니다.
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = new JavaMoney(2_000L);
if (money1.compareTo(money2) > 0) {
System.out.println("Money1이 Money2보다 금액이 큽니다.");
}
System.out.println(money1.plus(money2));
}
}
[코틀린]
코틀린에서는 어떻게 객체의 값을 비교할 수 있을까요?
코틀린에서는 compareTo를 가지고 오는 대신, 비교 연산자만 사용하면 코틀린에서 알아서 compareTo 메서드를 호출하여 비교해줍니다. 아래 코드와 같이 말이죠.
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = new JavaMoney(2_000L);
if (money1.compareTo(money2) > 0) {
System.out.println("Money1이 Money2보다 금액이 큽니다.");
}
}
}
3. 동등성, 동일성
동등성 (Equality) : 두 객체의 값이 같은가
동일성 (Identity) : 두 객체의 주소가 같은가? (완전히 동일한 객체인가?)
자바 | 코틀린 | |
동등성 (Equality) | equals() | == |
동일성 (Identity) | == | === |
4. 논리 연산자
&&, ||
Java와 완전히 동일하며, Java와 동일하게 Lazy 연산을 합니다. (if문 순차 진행)
5. 코틀린에 있는 특이한 연산자
in / !in
컬렌션이나 범위에 포함되어 있다, 포함되어 있지 않다.
a..b
a부터 b까지의 범위 객체를 생성한다.
a[i]
a에서 특정 index i로 값을 가져온다.
6. 연산자 오버로딩
kotlin에서는 객체마다 연산자를 직접 지정할 수 있습니다.
[자바]
java에서 money객체의 amount값을 더하려면 아래와 같이 진행해야합니다.
우선 JavaMoney라는 클래스를 만들어줍니다.
package lec04;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
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 String toString() {
return "JavaMoney{" +
"amount=" + amount +
'}';
}
}
그리고 객체를 만들어서 값을 더하는 코드는 아래와 같을 것입니다.
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = new JavaMoney(2_000L);
System.out.println(money1.plus(money2));
}
}
[코틀린]
코틀린에서는 위와 같은 행위를 어떻게 구현할 수 있을까요?
코틀린에서도 money 클래스를 만들어봅시다.
data class KotlinMoney(
val amount: Long
) {
operator fun plus(other: KotlinMoney) : KotlinMoney {
return KotlinMoney(this.amount + other.amount)
}
}
그리고 아래와 같은 코드를 실행하면, 자바에서 실행하는 것과 동일한 결과가 나타나는 것을 확인할 수 있습니다.
연산자 overrinde와 toString 메서드가 이미 구현이 되어있기 떄문입니다.
toString 메서드는 KotlinMoney 클래스 앞에 붙어있는 data 어노테이션 때문인 것 같네요
fun main() {
val money1 = KotlinMoney(1_000L)
val money2 = KotlinMoney(2_000L)
// 물론 아래와 같은 코드도 동일한 결과를 반환합니다.
// money1.plus(money2)
println(money1 + money2)
}
'공부방 > Kotlin' 카테고리의 다른 글
코틀린에서 반복문을 다르는 방법 (0) | 2023.05.17 |
---|---|
코틀린에서 조건문을(제어문) 다루는 방법 (0) | 2023.05.17 |
3. 코틀린에서 Type을 다루는 방법 (0) | 2023.05.16 |
코틀린에서 null을 다루는 방법 (0) | 2023.05.16 |
1. 코틀린에서 변수를 다루는 방법 (0) | 2023.05.16 |