Kotlin의 연산자 다루기
단항 연산자 / 산술 연산자
단항 연산자
++
--
산술 연산자
+
-
*
/
%
산술대입 연산자
+=
-=
*=
/=
%=
Java와 Kotlin 모두 동일!!
비교 연산자와 동등성, 동일성
비교 연산자
>
<
>=
<=
Kotlin은 Java와 다르게 객체를 비교할 때 비교 연산자를 사용하면 자동으로 compareTo
를 호출
Kotlin 비교 연산자 사용
1
2
3
4
5
6
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)
if(money1 > money2){
println("Money1이 Money2보다 금액이 큽니다")
}
위와 같이 객체를 비교할 때 비교 연산자를 사용할 수 있는데, 그 때 자동으로 compareTo
를 호출한다.
- 동등성(Equality) : 두 객체의 값이 같은가?
- 동일성(Identity) : 완전히 동일한 객체인가? (주소가 같은가?)
Java에서는 값을 비교하는 겨우는 ==
을 사용하고, 값은 동일하지만 주소가 다른 경우는 equals
를 사용
- 즉,
동일성 -> ==
/동등성 -> equals
Kotlin은 동일성과 동등성을 어떻게 구별하나?
- 동등성 :
==
(간접적으로 equals 호출) - 동일성 :
===
동일성 예시
1
2
3
4
5
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)
val money3 = money2
println(money3 === money2)
위와 같은 상황에서 주소가 같기 때문에 true
를 반환
동일성 false 예시
1
2
3
4
5
val money1 = JavaMoney(1_000L)
val money2 = JavaMoney(1_000L)
val money3 = money2
println(money3 === money1)
이렇게 값은 같지만 주소가 다른 경우는 ===
는 false
를 반환
동등성 예시
1
2
3
4
5
val money1 = JavaMoney(1_000L)
val money2 = JavaMoney(1_000L)
val money3 = money2
println(money3 == money1)
==
을 사용하면 주소가 아닌 값을 비교하기 때문에 true
반환
논리 연산자 / 코틀린에 있는 특이한 연산자
&&
||
!
Java와 완전히 동일하고, Lazy
연산을 수행
Lazy 논리 연산 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// fun2를 실행하지 않고 "본문 실행"을 출력
// ||는 `또는` 이기 때문에 fun1() 이 true 여서 뒤는 볼 필요 없이 넘긴다. (Lazy 연산)
if(fun1() || fun2()){
println("본문 실행")
}
// fun1()을 생행하지 않고 블럭을 넘김
// &&는 `모두` 이기 때문에 fun2() 가 이미 false 이기 때문에 뒤는 볼 필요 없이 넘긴다. (Lazy 연산)
if(fun2() && fun1()){
println("본문 실행")
}
fun fun1(): Boolean {
println("fun1")
return true
}
fun fun2(): Boolean {
println("fun2")
return false
}
Kotlin에 있는 특이한 연산자
in / !in
- 컬렉션이나 범위에 포함되어 있다 / 포함되지 않는다
a..b
- a부터 b까지의 범위 객체를 생성
- 반복문에서 주로 쓰임
a[i]
- a에서 특정
Index
i
로 값을 가져옴 (배열과 비슷)
- a에서 특정
a[i] = b
- a에 특정
Index
i
에 b를 넣음
- a에 특정
연산자 오버로딩
- Kotlin은 객체마다 연산자를 직접 정의 가능
Money class 예시
1
2
3
4
5
6
7
8
data class Money(
val amount: Long
) {
operator fun plus(other: Money): Money{
return Money(this.amount + other.amount)
}
}
Money 객체 연산
1
2
3
4
val kotlinMoney1 = Money(1_000L)
val kotlinMoney2 = Money(2_000L)
println(kotlinMoney1 + kotlinMoney2)
위와 같이 객체를 +
로 연산해도 plus
메서드 처럼 Money(amount=3000)
와 같은 값을 얻을 수 있다.
- 즉, 객체 끼리의 연산자를 Kotlin은 직접 정의할 수 있음
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.