Kotlin 문법 배우기
코틀린의 연산자 다루기
1. 단항 연산자와 산술 연산자
단항 연산자, 산술 연산자, 그리고 산술대입 연산자는 자바와 코틀린 모두 동일하다.
단항 연산자 | 산술 연산자 | 산술대입 연산자 |
---|---|---|
++ – |
+ - * / % |
+= -= *= /= %= |
2. 비교 연산자
다음 비교 연산자의 경우 형태와 사용법은 자바와 코틀린 모두 동일하다. 단, 자바와 다르게 코틀린에서는 객체를 비교할 때 비교 연산자를 사용하면 자동으로 compareTo()
를 호출한다.
비교 연산자 |
---|
> < >= <= |
다음과 같은 자바 코드를 코틀린으로 변환하면서 더 알아보자.
Expense expense1 = new Expense(1000);
Expense expense2 = new Expense(2000);
if (expense1.compareTo(expense2) < 0) {
System.out.println("Expense2이 Expense1보다 큽니다.");
}
👇
val payment1 = Payment(1000)
val payment2 = Payment(2000)
if (payment1 < payment2) {
println("Payment2이 Payment1보다 큽니다.")
}
비교 연산자를 알아보면서 동등성(Equality)과 동일성(Identity)을 알면 좋은데,
동등성: 두 객체의 값이 같은지 판단
동일성: 두 객체의 주소가 같은지, 즉 완전히 동일한 객체인지 판단
자바에서는 동일성을 비교하기 위해 ==
을 사용하였고, 동등성을 비교하기 위해서는 equals()
를 사용하였다.
하지만 코틀린에서는 동일성을 비교하기 위해 ===
를 사용하고, 동등성에 ==
를 사용한다. ==
를 사용하면 간접적으로 equals()
를 호출한다.
val payment1 = Payment(1000)
val payment2 = payment1
val payment3 = Payment(1000)
println(payment1 === payment2) // true, 동일성: 주소까지 같은 객체
println(payment1 == payment3) // true, equals()를 호출하여 비교
3. 논리 연산자와 코틀린의 특수 연산자
논리 연산자
다음 논리 연산자 또한 자바와 코틀린과 완전 동일하며, 해당 연산자는 자바처럼 Lazy 연산을 수행한다.
※ Lazy 연산이란? && 연산에서는 앞의 논리가 false이면 뒤의 논리는 확인하지 않고 false, || 연산에서는 앞의 논리가 true이면 뒤의 논리는 확인하지 않고 true로 처리하는 연산
논리 연산자 |
---|
&& ││ ! |
코틀린의 특수한 연산자
코틀린에 있는 특수한 연산자로는 in
연산자와 !in
연산자가 존재한다. 이는 컬렉션이나 범위에 포함되어 있는지, 포함되어 있지 않은지를 뜻하는 연산자이다.
그리고 a..b
라는 연산자도 존재한다. 이는 a부터 b까지의 범위 객체를 생성하는 연산자이다.
위 연산자들은 주로 반복문에서 사용하는 연산자이다.
코틀린에서는 a[i]
라는 a에서 특정 인덱스 i로의 값을 가져오는 연산자가 존재하며, a[i] = b
라는 a의 특정 인덱스 i에 b라는 값을 넣는 연산자가 존재한다.
var str = "ABC"
println(str[1]) // B
str[1] = "D"
println(str[1]) // D
4. 연산자 오버로딩
코틀린에서는 객체마다 연산자를 직접 정의할 수 있다.
data class Payment (
val amount: Int
) {
operator fun plus(other: Payment): Payment {
return Payment(this.amount + other.amount)
}
}
val payment1 = Payment(1000)
val payment2 = Payment(2000)
payment1 + payment2 // Payment(amount = 3000)
위처럼 코틀린에서는 객체마다 플러스, 마이너스, 단항, 비교 등 다양한 연산들을 직접 정의할 수 있다.