정리
- 단항 연산자, 산술 연산자, 산술대입 연산자는 Java와 동일하다
- 비교 연산자 사용법도 Java 동일하지만,
객체끼리도 자동 호출되는 compareTo를 이용해 비교 연산자를 사용할 수 있다
- in / !in / a..b / a[i] / a[i] = b 와 같이 코틀린에서 새로 생긴 연산자도 있다
- 객체끼리의 연산자를 직접 정의할 수 있다
단항 연산자 / 산술 연산자
| - 단항 연산자: ++ -- - 산술 연산자: + - * / % - 산술대입 연산자: += -= *= /= %= |
비교 연산와 동등성, 동일성
비교 연산자
| - 비교 연산자: > < <= >= |
Java와 다르게 객체를 비교할 때 비교 연산자를 사용하면 자동으로 compareTo를 호출해준다
fun main() {
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)
if(money1 > money2) {
println("Money1이 Money2보다 금액이 크다")
}
}
동등성, 동일성
- 동등성(Equality): 두 객체의 값이 같은가
- 동일성(Identity): 완전히 동일한 객체인가(주소가 같은가)
Java
동일성에는 == 를 사용하고, 동등성에는 equals를 직접 호출한다
public static void main(String[] args){
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = money1;
JavaMoney money3 = new JavaMoney(1_000L);
System.out.println(money1 == money2); // true
System.out.println(money1 == money3); // false
}
Kotlin
동일성에는 === 를 사용, 동등성에는 == 를 호출한다.
== 를 사용하면 간접적으로 equals를 호출해준다.
fun main() {
val money1 = JavaMoney(2_000L)
val money2 = money1
val money3 = JavaMoney(1_000L)
println(money1 === money2) // true
println(money1 === money3) // false
println(money1 == money3) // true
}
논리 연산자 / 코틀린에 있는 특이한 연산자
논리 연산자
| - 논리 연산자: && || ! |
Java와 완전 동일하며, Lazy 연산을 수행한다
💡Lazy 연산이란?
필요한 시점에만 계산하는 방식이다
fun main() {
if(fun1() || fun2()) {
println("본문")
}
}
fun fun1(): Boolean {
println("fun 1")
return true
}
fun fun2(): Boolean {
println("fun 2")
return false
}
/*
-- 결과 --
fun1
본문
*/
위와 같은 함수가 있을 때 main에서 fun1이 true면 어짜피 실행이 될 것이기 때문에, fun2는 수행 없이 바로 본문이 출력된다.
코틀린에 있는 특이한 연산자
- in / !in
: 컬렉션이나 범위에 포함되어 있다 / 포함되어 있지 않다
- a..b
: a부터 b까지의 범위 객체를 생성한다
- a[i]
: a에서 특정 index i로 값을 가져온다
- a[i] = b
: a의 특정 index i에 b를 넣는다
연산자 오버로딩
코틀린에서는 객체마다 연산자를 직접 정의할 수 있다
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = new JavaMoney(2_000L);
System.out.println(moeny1.plus(money2));
}
public class JavaMoney implements Comparable<JavaMoeny> {
private final long amount;
(...)
public JavaMoney plus(JavaMoney other) {
return new JavaMoney(this.amount + other.amount);
}
(...)
}
자바에서 위와 같은 로직이 있다고 하자
fun main() {
val money1 = Money(1_000L)
val money2 = Money(2_000L)
println(money1 + moeny2) // 3000
}
data class Money(
val amount: Long
){
operator fun plus(other: Money): Money {
return Money(this.amount + other.amount)
}
}
코틀린에서는 operator 키워드를 사용해서 특정 함수 이름으로 연산자의 동작을 정의할 수 있다
'지식을 쌓아보자 > Kotlin' 카테고리의 다른 글
| [기초] 코틀린에서 반복문을 다루는 방법 (0) | 2025.12.14 |
|---|---|
| [기초] 코틀린에서 조건문을 다루는 방법 (0) | 2025.12.14 |
| [기초] 코틀린에서 Type을 다루는 방법 (0) | 2025.12.11 |
| [기초] 코틀린에서 null을 다루는 방법 (0) | 2025.12.10 |
| [기초] 코틀린에서 변수를 다루는 방법 (0) | 2025.12.07 |