배열 (Array)
코틀린에서 배열은 Array 클래스로 표현됩니다. 해당 클래스는 (연산자 오버로딩 규칙에 의해 []로 바뀌는) get과 set 함수를 가지고 있고 size 프로퍼티도 가지고 있습니다. 그 외 다른 유용한 멤버 함수들도 있습니다.
(Ref. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)
class Array<T> private constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator<T> // ... } |
배열 인스턴스는 arrayOf, arrayOfNulls 및 emptyArray 표준 라이브러리 함수를 사용하여 만들 수 있습니다.
예를 들어 배열을 만들기 위해서 arrayOf() 라이브러리 함수를 사용해서 값을 전달하면 됩니다. 즉, arrayOf(1, 2, 3)가 array[1, 2, 3]을 만듭니다. 다음의 예제를 보면 이해하기 쉽습니다.
fun main(args: Array<String>) { var a = arrayOf(1, 2, 3) println(a.get(0)) println(a.get(1)) println(a.get(2)) println(a[0]) println(a[1]) println(a[2]) a[0] = 100 a.set(1, 200) println(a[0]) println(a[1]) println(a[2]) } |
1 2 3 1 2 3 100 200 3 |
코드를 보면 앞서 말했듯이 get과 set 함수는 []로 바뀔 수 있습니다. 해당 함수의 형태와 역할은 다음과 같습니다.
get : 특정 인덱스의 엘리먼트를 리턴하며 인덱스 연산자 []로 호출할 수 있음 operator fun get(index: Int): T |
set : 특정 인덱스의 특정 값을 set 하며 인덱스 연산자 []로 호출할 수 있음 operator fun set(index: Int, value: T) |
또한 코틀린은 Boxing overhead 없이 기본 유형(primitive type)의 배열을 표현하기 위한 전문 클래스를 가지고 있습니다. ByteArray, ShortArray, IntArray 등이 있습니다. 이 클래스들은 Array 클래스와 상속 관계가 없지만 동일한 메서드 및 프로퍼티 집합을 가집니다. 그리고 각 클래스는 그에 맞는 팩토리 함수를 가지고 있습니다.
fun main(args: Array<String>) { var a: IntArray = intArrayOf(1, 2, 3) for (i in a) { println(i) } var b: ShortArray = shortArrayOf(10, 20, 30) for (i in b) { println(i) } } |
1 2 3 10 20 30 |
생성자를 이용해서 다음과 같이 배열을 만들 수도 있습니다.
(Ref. https://github.com/JetBrains/kotlin/blob/1.2.0/core/builtins/native/kotlin/Array.kt#L31)
fun main(args: Array<String>) { val a = Array(5, { i -> (i * i) }) for (i in a) { println(i) } } |
0 1 4 9 16 |
결과 값이 왜 저렇게 될까요?
레퍼런스를 보시면 'each element is calculated by calling the specified [init] function.'라고 합니다.
init함수가 square numbers(제곱)를 생성하고 있는 것으로 보입니다.
'프로그래밍 > Kotlin' 카테고리의 다른 글
국가 수도 맞추기 앱 만들기 #01 (0) | 2018.02.06 |
---|---|
코틀린으로 Activity에 Hello World 출력하기 (0) | 2018.01.21 |
코틀린(Kotlin) List & Map (0) | 2018.01.17 |
코틀린(Kotlin) 리시버가 있는 함수 리터럴 (0) | 2018.01.05 |
코틀린 익명 함수 (Anonymous Function) (0) | 2018.01.02 |
코틀린 Lambda Expression Syntax (0) | 2017.12.21 |
코틀린 Higher-Order Functions #2 (0) | 2017.12.21 |