PS 문제를 하나씩 풀다 보니, 공부가 필요하다고 느낀 문법을 정리한 글입니다.
배열(Array)은 같은 타입의 값을 고정된 크기로 저장하는 자료구조입니다.
즉, 여러 값을 하나로 묶어서 다룰 수 있지만, 한 번 생성하면 크기를 바꿀 수 없다는 특징이 있습니다.
Kotlin에서도 배열을 사용할 수 있지만, 일반적인 경우에는 List, Set, Map 같은 컬렉션을 더 자주 사용합니다.
그럼에도 배열은 특정 상황에서 여전히 유용하게 쓰입니다.
배열은 주로 크기가 정해진 데이터를 인덱스로 빠르게 다뤄야 할 때 사용합니다.
또는 자바 API와 함께 작업하거나, 원시 타입 배열(IntArray, DoubleArray)이 필요한 경우에도 자주 등장합니다.
컬렉션과 비교하면 다음과 같은 차이가 있습니다.
==로 구조적 비교를 할 수 있지만, 배열은 ==가 참조 비교이기 때문에 내용 비교에는 contentEquals()를 사용해야 합니다.즉, Kotlin에서는 보통 컬렉션이 더 자주 쓰이지만,
고정된 크기의 데이터를 다루거나 배열 자체가 더 적합한 상황에서는 배열을 사용하는 것이 자연스럽습니다.
Kotlin에서는 여러 방식으로 배열을 만들 수 있습니다.
arrayOf()가장 기본적인 배열 생성 방식입니다.
값을 직접 넣어서 배열을 만들 수 있습니다.
fun main() {
val simpleArray = arrayOf(1, 2, 3)
println(simpleArray.joinToString())
}
// 1, 2, 3
arrayOf()는 전달한 값들을 바탕으로 배열을 생성합니다.
joinToString()을 사용하면 배열의 요소를 보기 쉽게 출력할 수 있습니다.
arrayOfNulls()주어진 크기만큼 null로 채워진 배열을 만들 때 사용합니다.
fun main() {
val nullArray: Array<Int?> = arrayOfNulls(3)
println(nullArray.joinToString())
}
// null, null, null
위 예제에서는 크기가 3인 배열을 만들고, 모든 요소가
null로 초기화된 상태입니다.
null이 들어갈 수 있으므로 타입도Int?처럼 nullable 타입으로 선언해야 합니다.
emptyArray()비어 있는 배열을 만들 때 사용합니다.
fun main() {
val exampleArray = emptyArray<String>()
println(exampleArray.joinToString())
}
emptyArray()는 요소가 없는 배열을 생성합니다.
초기값 없이 빈 배열이 필요한 상황에서 사용할 수 있습니다.
특정 크기의 배열을 만들고, 모든 요소를 같은 값으로 초기화할 수도 있습니다.
fun main() {
val initArray = Array(3) { 0 }
println(initArray.joinToString())
}
// 0, 0, 0
위 코드는 크기가 3인 배열을 만들고, 각 요소를 모두
0으로 초기화합니다.
다만 정수처럼 원시 타입을 다룰 때는 Array<Int>보다 IntArray를 쓰는 경우도 많습니다.
fun main() {
val intArray = IntArray(3)
println(intArray.joinToString())
}
// 0, 0, 0
IntArray는 정수 전용 배열이며, 기본값인0으로 초기화됩니다.
배열을 만들 때 각 인덱스를 이용해 값을 계산할 수도 있습니다.
fun main() {
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { print(it) }
}
// 014916
위 예제에서는 각 인덱스
i에 대해i * i값을 문자열로 저장하고 있습니다.
즉, 인덱스 0부터 4까지의 제곱값인0,1,4,9,16이 배열에 들어갑니다.
배열은 컬렉션과 다르게 ==로 비교하면 내용이 아니라 참조를 비교합니다.
fun main() {
val a = arrayOf(1, 2, 3)
val b = arrayOf(1, 2, 3)
println(a == b)
println(a.contentEquals(b))
}
false
true
a == b는 두 배열이 같은 객체인지를 확인하므로false가 나오고,
contentEquals()는 배열 안의 요소가 같은지를 비교하므로true가 나옵니다.
이 부분은 컬렉션과 다르기 때문에 꼭 구분해서 알아두는 것이 좋습니다.
이번 글에서는 Kotlin의 배열(Array)에 대해 정리해보았습니다.
배열은 같은 타입의 데이터를 고정된 크기로 저장하는 자료구조이며,
인덱스로 빠르게 접근할 수 있다는 장점이 있습니다.
다만 크기를 바꿀 수 없고, 컬렉션보다 유연성이 적기 때문에 Kotlin에서는 일반적으로 컬렉션을 더 많이 사용합니다.
그럼에도 다음과 같은 상황에서는 배열이 유용합니다.
IntArray 같은 원시 타입 배열이 필요할 때즉, 배열과 컬렉션은 서로 대체 관계라기보다
상황에 따라 더 적합한 쪽을 선택하는 것이 중요하다고 볼 수 있습니다.