Search

Array

같은 타입 또는 하위 타입의 고정된 수의 값을 보유하는 데이터 구조
객체 유형 배열에서 기본형을 사용하면 오토박싱에 의한 오버헤드가 발생한다.
특수한 요구사항이 있지 않으면 배열 대신 컬렉션을 사용하라.
컬렉션은 읽기 전용으로 설정할 수 있으므로 제어력이 높고 명확한 의도가 담긴 견고한 코드를 작성할 수 있다.
컬렉션에서 요소를 추가하거나 제거하는 것은 쉽지만 배열은 크기가 고정되어 매번 새 배열을 만들기 때문에 비효율적이다.
동등성을 비교하기 위해 컬렉션은 == 을 사용할 수 있지만 배열은 특수 함수를 사용해야한다.
배열 타입 지정
var exampleArray = emptyArray<String>() //OR var exampleArray: Array<String> = emptyArray()
Kotlin
복사

배열 생성

Array 생성자 혹은 arrayOf(), arrayOfNulls(), emptyArray() 함수
// Creates an array with values [1, 2, 3] val simpleArray = arrayOf(1, 2, 3) println(simpleArray.joinToString()) // 1, 2, 3 // Creates an array with values [null, null, null] val nullArray: Array<Int?> = arrayOfNulls(3) println(nullArray.joinToString()) // null, null, null var exampleArray = emptyArray<String>()
Kotlin
복사

요소 접근 및 수정

인덱스 연산자 [] 를 사용한다.
val simpleArray = arrayOf(1, 2, 3) val twoDArray = Array(2) { Array<Int>(2) { 0 } } // Accesses the element and modifies it simpleArray[0] = 10 twoDArray[0][0] = 2 // Prints the modified element println(simpleArray[0].toString()) // 10 println(twoDArray[0][0].toString()) // 2
Kotlin
복사
코틀린의 배열은 불변적이다.
Array<String>을 Array<Any>로 할당할 수 없다.
Array<out Any>를 사용하면 타입 안정성을 유지하면서 배열을 공변적으로 사용할 수 있다.
Array<out Any>는 “어떤 타입이든 받아들이는 배열”이 아니라 “어떤 타입이든 반환할 수 있는 배열”

배열을 사용하는 작업

함수에 가변 개수의 인수 전달
스프레드 연산자 * 를 통해 가변적인 수의 인수를 포함하는 배열을 함수에 전달할 수 있다.
함수에서는 vararg를 통해 가변적인 개수의 인수를 받을 수 있다.
fun main() { val lettersArray = arrayOf("c", "d") printAllStrings("a", "b", *lettersArray) // abcd } fun printAllStrings(vararg strings: String) { for (string in strings) { print(string) } }
Kotlin
복사
배열 비교
두 배열에 같은 요소가 같은 순서로 있는지 비교하려면 .contentEquals().contentDeepEquals() 함수를 사용한다.
배열을 비교하기 위해 == 또는 != 를 사용하는 것은 동등성 비교가 아니라 참조 비교이다.
val simpleArray = arrayOf(1, 2, 3) val anotherArray = arrayOf(1, 2, 3) // Compares contents of arrays println(simpleArray.contentEquals(anotherArray)) // true // Using infix notation, compares contents of arrays after an element // is changed simpleArray[0] = 10 println(simpleArray contentEquals anotherArray) // false
Kotlin
복사
배열 변환
sum
.sum() 함수를 사용해서 모든 요소의 합계를 반환한다.
숫자형 타입 배열에서만 사용 가능하다.
val sumArray = arrayOf(1, 2, 3) // Sums array elements println(sumArray.sum()) // 6
Kotlin
복사
shuffle
.shuffle() 함수를 사용한다.
val simpleArray = arrayOf(1, 2, 3) // Shuffles elements [3, 2, 1] simpleArray.shuffle() println(simpleArray.joinToString()) // Shuffles elements again [2, 3, 1] simpleArray.shuffle() println(simpleArray.joinToString())
Kotlin
복사
convert arrays to collections
.toList(), .toSet() 함수를 사용한다.
//Array to List val simpleArray = arrayOf("a", "b", "c", "c") // Converts to a Set println(simpleArray.toSet()) // [a, b, c] // Converts to a List println(simpleArray.toList()) // [a, b, c, c]
Kotlin
복사
Pair<K, V> 배열만 Map으로 변환할 수 있다.
중위 표기법을 사용하여 to 함수를 호출하여 Pair 튜플을 만든다.
//Array to Map val pairArray = arrayOf("apple" to 120, "banana" to 150, "cherry" to 90, "apple" to 140) // Converts to a Map // The keys are fruits and the values are their number of calories // Note how keys must be unique, so the latest value of "apple" // overwrites the first println(pairArray.toMap()) // {apple=140, banana=150, cherry=90}
Kotlin
복사

원시형 배열

Array와 기본형 타입을 함께 사용하면 기본형은 객체로 박스화된다.
기본형 타입을 박스화 오버헤드 없이 그대로 사용하려면 원시형 배열을 사용해야 한다.
원시형 배열을 객체형 배열로 변환하려면 .toTypedArray()를 사용한다.
객체형 배열을 원시형 배열로 변환하려면 .toByteArray(), .toCharArray() 등을 사용한다.
원시형 배열
Java
BooleanArray
boolean[]
ByteArray
byte[]
CharArray
char[]
DoubleArray
double[]
FloatArray
float[]
IntArray
int[]
LongArray
long[]
ShortArray
short[]