자바와 마찬가지로 < > <= >= 등을 이용하여 비교 연산
다른점은 코틀린에서는 비교연산자를 사용할 경우 compareTo함수를 호출
* 아래의 예시와 같이 compareTest 메소드에서 두 객체 간 부등호는 JavaMoneyKotlin클래스의 compareTo를 호출하고 있음
data class JavaMoneyKotlin(val amount:Long) : Comparable<JavaMoneyKotlin> {
override fun compareTo(other: JavaMoneyKotlin): Int {
return java.lang.Long.compare(amount, other.amount)
}
}
1. 부등호 연산자가 compareTo를 자동으로 호출
2. 자바에서는 compareTo를 직접적으로 써야하기 때문에, 반환 값에 대한 헷갈림이 있을 수 있음
ex) money1.compareTo(money3) > 0 -> 0이 무엇을 의미하는지 한번 더 확인해야됨
3. 코틀린에서는 부동흐 자체가 compareTo를 가리키고 있으므로 직관성이 자바에 비해 높다.
fun compareTest() {
val money1 = JavaMoneyKotlin(2_000L)
val money2 = JavaMoneyKotlin(2_000L)
if(money1 > money2)
println("money1이 더큼")
}
0. 동등성, 동일성
* 동등성: 두 객체의 값이 같은가?
* 동일성: 두 객체가 완전히 같은 객체인가? 즉, 같은 주소를 가지는 객체인가?
1. 자바에서 동등성, 동일성
* 동등성: 객체1 == 객체2
* 동일성: 객체1.equals(객체2)
2. 코틀린에서 동등성, 동일성
* 동등성: 객체1 == 객체2
-> == 연산자를 쓸 경우 간접적으로 equals를 호출 -> 위 비교연산과 동일
* 동일성: 객체1 === 객체2
0) Lazy연산이란?
* 두 함수가 있는 상태에서 조건에 따라 하나의 함수만 실행되게 하는 연산
fun exampleLazy(){
// 이렇게 두 함수가 있는 상태에서 조건에 따라 하나의 함수만 실행되게 하는 연산을 lazy연산이라 불림
// 두 함수에서 || 조건이기때문에 fun1만 실행되고 fun2실행 없이 내부 프린트 출력
if(fun1() || fun2())
{
println("fun1만 실행됨")
}
}
fun fun1(): Boolean{
println("fun1")
return true;
}
fun fun2():Boolean{
println("fun2")
return false;
}
1. in / !in: 컬렉션에 리스트 범위에 포함되어있다, 있지 않다를 의미
2. a..b: a~b까지의 범위 객체를 생성, 반복문에서 디테일 확인
3. a[i]: 컬렉션에서 특정 i위치에 있는 값을 가져옴
* a[i] = 3 -> 값 설정도 가능
1. 자바에서는 필요에 따라 연산자에 대해 커스텀 메소드를 구현해야함
* 즉, 기존 기본제공 연산자를 오버로딩할 수 없음
2. 코틀린에서는 연산자 오버로딩 가능
* 아래 사진처럼 가능하다