[Kotlin] 코틀린 연산자

백현균·2023년 4월 2일
0

1. 단항연산자/산술연사자

1) 자바와 동일

2. 비교연산자와 동등, 동일성

1) 비교연산자

자바와 마찬가지로 < > <= >= 등을 이용하여 비교 연산
다른점은 코틀린에서는 비교연산자를 사용할 경우 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이 더큼")
}

2) 동등성, 동일성

0. 동등성, 동일성
	* 동등성: 두 객체의 값이 같은가?
    * 동일성: 두 객체가 완전히 같은 객체인가? 즉, 같은 주소를 가지는 객체인가?
1. 자바에서 동등성, 동일성
	* 동등성: 객체1 == 객체2
    * 동일성: 객체1.equals(객체2)
2. 코틀린에서 동등성, 동일성
	* 동등성: 객체1 == 객체2
    	-> == 연산자를 쓸 경우 간접적으로 equals를 호출 -> 위 비교연산과 동일
    * 동일성: 객체1 === 객체2

3. 논리연산자 / 코틀린에만 존재하는 연산자

1) 자바와 동일한 논리연산자를 가지며, lazy연산도 가능

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;
}

2) 코틀린에만 존재하는 연산자

1. in / !in: 컬렉션에 리스트 범위에 포함되어있다, 있지 않다를 의미
2. a..b: a~b까지의 범위 객체를 생성, 반복문에서 디테일 확인
3. a[i]: 컬렉션에서 특정 i위치에 있는 값을 가져옴
	* a[i] = 3 -> 값 설정도 가능

4. 연산자 오버로딩

1) 자바와의 차이점

1. 자바에서는 필요에 따라 연산자에 대해 커스텀 메소드를 구현해야함
	* 즉, 기존 기본제공 연산자를 오버로딩할 수 없음
2. 코틀린에서는 연산자 오버로딩 가능
	* 아래 사진처럼 가능하다


0개의 댓글