연산자
Kotlin에서 연산자는 Java와 어떻게 다를까?
비교 연산자
비교연산자에는 <, <=, >, >=, == 정도가 될 수 있다.
Kotlin에서 비교 연산자를 이용하면 자동으로 compareTo를 호출하게 된다.
val isTrue : Boolean = 1 < 2;
Kotlin에서 비교 연산자를 사용할 때 비교연자를 눌러보면, compareTo 함수를 이용해서 비교를 하는것을 알 수 있다.
@kotlin.internal.IntrinsicConstEvaluation
public override operator fun compareTo(other: Int): Int
동등성, 동일성
동등성과 동일성의 차이는 동등성은 값이 같은지를 비교하고 동일성은 값의 주소가 같은지를 비교한다.
- Java
String text = "Hello";
String compareText = "Hello";
text.equals(compareText);
text == compareText;
Java에서는 동등한경우에는 .equals()를 동일한 경우에는 ==을 사용했었다.
- Kotlin
val text : String = "Hello"
val compareString : String = "Hello"
val result1 : Boolean = text == compareString
val result2 : Boolean = text === compareString
Kotlin에서는 동등한 경우는 == 동일한 경우는 === 사용한다.
== 비교 연산자를 자세히보면
@kotlin.internal.IntrinsicConstEvaluation
public override fun equals(other: Any?): Boolean
equals 함수를 쓰는 것을 알 수 있다.
논리 연산자
논리연산자는 &&,||,! 등이 있고
Kotlin에서 논리 연산자는 Java랑 같다
Kotlin만에 특이한 연산자
Java에는 없고 코틀린만에 특이한 연산자가 있다.
- in/!in
- a..b a부터 b까지의 범위 객체를 생성한다.
in/!in
컬렉션이나 범위에 포함되어 있는지 포함되어 있지 않은지에 대한 연산자이다.
val fruits = listOf("apple", "banana", "orange")
if ("apple" in fruits) {
return true
}
if ("grape" !in fruits) {
return true
}
이렇게 컬렉션을 만들고 컬렉션안에 해당 사항이 있는지 확인 가능한 연산자를 사용 가능하다.
val numbers = 1..10
if (5 in numbers) {
return true
}
또한 이렇게 범위 숫자 범위안에 있는지도 확인 가능하다.
이 연산자들을 상세하게 보면
override fun contains(element: @UnsafeVariance E): Boolean
listOf에 in은 컬렉션의 contains를 호출하고
override fun contains(value: Int): Boolean = first <= value && value <= last
1..10에 in은 Integer에 contains를 호출하는 것을 볼 수 있다.
a..b
a..b 연산자는 a부터 b까지의 범위 객체를 생성한다.
val intRange = 1..5
for (i in intRange) {
print("$i ")
}
1..5는 범위를 1 ~ 5까지의 값을 객체로 생성한다.
또한 문자의 범위로도 객체 생성이 가능하다.
val charRange = 'A'..'E'
for (c in charRange) {
print("$c ")
}
'A'..'E'는 'A' 부터 'E' 범위 까지의 객체를 생성한다.
이 범위를 역순으로도 생성이 가능하다.
val reverseRange = 5 downTo 1
for (i in reverseRange) {
print("$i ")
}
5 downTo 1은 역순으로 5부터 1까지 하나씩 내려가는 범위 객체를 만들어준다.
이 범위에 대한 단계도 지정이 가능하다.
val stepRange = 1..10 step 2
for (i in stepRange) {
print("$i ")
}
1..10 step 2는 1 부터 10까지 범위 중에 2씩 올라간 범위 객체를 만들어준다.
마지막 값이 없는 범위 객체도 만들기가 가능하다.
val untilRange = 1 until 5
for (i in untilRange) {
print("$i ")
}
1 unitl 5는 5가 제외된(마지막 값) 범위 객체를 만들어준다.
1..5 ,'A'..'B' 는 각자 타입의 rangeTo 함수를 호출한다.
public operator fun rangeTo(other: Char): CharRange
그리고 5 downTo 1, 1..10 step 2은
public infix fun IntProgression.step(step: Int): IntProgression {
checkStepIsPositive(step > 0, step)
return IntProgression.fromClosedRange(first, last, if (this.step > 0) step else -step)
}
각 타입 Progression의 fromClosedRange 함수를 호출한다.
요약
- Kotlin에서 동등성은 == 동일성은 ===을 사용한다.
- Java와 논리 연산자는 같다.
- in/!in은 범위에 속해 있는지 판단하는 연산자이다.
- a..b는 a 부터 b까지 범위 객체를 생성하는 연산자이다.
'Kotlin > Basic' 카테고리의 다른 글
Kotlin은 Java와 무엇이 다른가? (5) - 반복문 (1) | 2024.09.16 |
---|---|
Kotlin은 Java와 무엇이 다른가? (4) - 제어문 (1) | 2024.09.16 |
Kotlin은 Java와 무엇이 다른가? (3) - Type (0) | 2024.09.12 |
Kotlin은 Java와 무엇이 다른가? (2) - Null (1) | 2024.09.12 |
Kotlin은 자바와 무엇이 다른가? (1) - 변수 (0) | 2024.09.10 |