Kotlin에서 연산자를 다루는 방법

김민우·2023년 5월 18일
0

kotlin

목록 보기
5/6
post-thumbnail

본 글은 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
을 보고 정리한 글입니다.


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

Java와 다르게 객체를 비교할떄, 비교 연산자를 사용하면 자동으로 compareTo를 호출해준다.

fun main() {
	val money1 = JavaMoney(2000L)
    val money2 = JavaMoney(1000L)
    
    if(money1 > money2) {
    	println("money1이 money2보다 큽니다")
    }

동등성(Equality): 두 객체의 값이 같은가?
동일성(Identity): 완전히 동일한 객체인가 (주소가 같은가?)

JAVA

  • Java에서는 두 인스턴스가 정체성이 동일하다고 판별할때 ==를 사용
  • 두 인스턴스의 값이 동등할때 equals를 호출

KOTLIN

  • Kotlin에서는 동일성에 ===를 사용, ==를 사용하면 간접적으로 equals를 호출한다.

2. 논리 연산자와 코틀린에 있는 특이한 연산자

  • 논리연산자는 Java와 동일하고 Lazy 연산을 사용한다.

Lazy 연산이란? 불필요한 연산을 피하기 위해 연산을 지연시키는 것이다.
[출처] https://dororongju.tistory.com/137

함수형 프로그래밍에서 1~10의 정수를 갖는 List에서 6보다 작고, 짝수인 요소를 찾아 10배 시킨 코드를 예시를 들자.

List<Integer> list = Arrays.asList(1,2,...,10);

System.out.println(
	list.stream()
    	.filter(i -> i<6)
        .filter(i -> i%2 == 0)
        .map(i -> i*10)
        .collect(Collectors.toList())
  • 위 코드에 동작방식은 항상 이렇게 작동하지 않는다.
  1. 1~10 까지 요소 중 6보다 작은 값을 구한다.
  2. 1번에서 구한 요소들 중 짝수인 값을 구한다.
  3. 2번에서 구한 요소들에 10을 곱해준다.

위 방식으로 항상 동작하는 방식은 Eager 연산이라고 한다!

  • Lazy 방식은 이렇게 동작한다.
  1. 6보다 작은지 검사하고 -> 만약 false면, 나머지 과정을 패스하고 다음 인자 진행
  2. 짝수 검사 -> 만약 false면, 나머지 과정을 패스하고 다음 인자 진행
  3. 요소에 10을 곱해준다.

즉 결과를 얻기 위해 필요하지 않은 연산은 수행하지 않는 방식!

in / !in

  • 컬렉션이나 범위에 포함되어 있다, 포함되어 있지 않다.

a..b

  • a부터 b까지의 범위 객체를 생성한다.

a[i]

  • a에서 특정 index i로 값을 가져온다.

3. 연산자 오버로딩

코틀린에서는 연산자를 직접 오버로딩 가능하다.

fun main() {
	val money1 = Money(1000L)
    val money2 = Money(2000L)
    println(money1 + money2) // toString이 자동으로 구현된다.
}

코틀린에서 객체마다 연산자(+, -, 단항 등..)를 직접 정의 가능하다!

profile
Backend Developer

0개의 댓글