코틀린 언어 정리 1-8

기본 - operator(연산자)

spread operator( 전개 연산자 )

* (asterisk/별표)

개발을 하다 보면 array를 가변 인자를 통해 전달할 경우 array 각각의 요소를 풀어서 넘겨주어야 하는 경우가 있습니다. 이런 경우 원래는 배열의 요소들을 각각 직접 명시해야 하나 *(spread operator)를 사용하면 간단하게 처리됩니다. 

이 연산자는 vararg와 관련하여 사용됩니다. 가변인수를 전달받는 함수에 배열을 전달할 때 편하게 사용할 수 있습니다.



예제 ( 정상 동작 )

fun funVararg ( vararg args: String ) {

   println("${args[0]}, ${args[1]}")

}


fun main(args: Array<String>) {

   var list = listOf("가", "나", "다")

   funVararg(*list.toTypedArray())

   var array = arrayOf("가", "나", "다")

   funVararg(*array)

}



예제 ( 컴파일 에러 1 )

fun funVararg ( arg1: String, arg2: String, arg3: String ) { // 고정된 개수의 인자. vararg 로 선언되지 않음

   println("no vararg")

   println("$arg1, $arg2, $arg3")

}


fun main(args: Array<String>) {

   var list = listOf("가", "나", "다")

   funVararg(*list.toTypedArray())

   var array = arrayOf("가", "나", "다")

   funVararg(*array) // 컴파일 에러

}

위의 예제처럼 vararg 매개변수가 아닌 경우(array 변수) 컴파일 에러가 발생합니다.


예제 ( 컴파일 에러 2 )

fun funVararg ( vararg va: Int ) { // intArray type으로 처리된다.

   for ( value in va ) {

       println(value)

   }

}


fun testVar () {

   funVararg ( 1, 2, 3, 4, 5 )

   funVararg (*intArrayOf(1, 2, 3, 4, 5))

   var array = arrayOf<Int>(1, 2, 3, 4, 5, 6) // Array<Int> type으로 처리됨

   // funVararg (*array) // Array<int>와 intArray type 이 다르게 처리되기 때문에 에러가 발생한다.

}

위의 예제의 마지막 줄은 문제가 없을 것 같은데 컴파일 에러가 발생합니다. 원인은 Array<Int>와 intArray type이 각각 다른 타입이기 때문입니다.



범위 연산자

.. ( dot / 마침표 2개 )

예제

0..10

0부터 10까지의 범위를 표현합니다.( 0과 10이 포함됩니다. )


예제

fun test () {

   for ( nNum in 0..10 ) {

       println("$nNum")

   }

}

범위 연산자는 주로 for 문과 같이 쓰입니다.



비트 연산자

C/C++/Java 등에는 비트 연산자를 모두 기호( ex. <<<, >>>, &, | )로 별도로 정의해 놓았으나 코틀린에서는 모두 문자(영어) 이름을 가진 객체 멤버 함수( ex. shl, shr 등 )를 제공합니다. Int와 Long 형 객체 에서만 사용할 수 있습니다.


연산자들

shl(bits) – signed shift left (Java's <<)

shr(bits) – signed shift right (Java's >>)

ushr(bits) – unsigned shift right (Java's >>>)

and(bits) – bitwise and ( & )

or(bits) – bitwise or ( | )

xor(bits) – bitwise xor ( ^ )

inv() – bitwise inversion ( ~ )


+ Recent posts