Kotlin 배열(Array) 선언, 초기화, 주요 함수
배열(Array)
arrayOf()
으로 배열을 생성한다. 배열의 개수는 고정이긴 하지만 성능이 우수하다.
fun main() {
val nums = arrayOf(1, 2, 3)
val cols = arrayOf("Red", "Green", "Blue")
for (n in nums) { println(n) }
for (c in cols) { println(c) }
}
Output:
1
2
3
Red
Green
Blue
아래와 같이 변수 선언시에 Array<Int>
타입을 입력하면, 뒤 부분의 타입은 <>
으로 생략할 수 있다.
val array: Array<Int> = emptyArray<>()
대괄호 [...]
로 배열의 요소에 접근할 수 있으며, 배열의 인덱스는 0부터 시작한다.
println(nums[0])
println(cols[1])
빈(Empty) 배열 선언
아래 함수로 특정 타입의 빈 배열을 선언할 수 있다.
val array1 = emptyArray<Int>()
val array2 = arrayOf<Int>()
``
```kotlin
fun main() {
val array1 = emptyArray<Int>()
println("array1: ${array1.contentToString()}")
val array2 = arrayOf<Int>()
println("array2: ${array2.contentToString()}")
}
Output:
array1: []
array2: []
배열 선언 시, 초기 값 설정
arrayOf<Type>(values)
로 배열에 초기 값을 설정할 수 있다.
이때, (values)
로 타입을 유추할 수 있기 때문에 <Type>
은 생략할 수 있다.
fun main() {
val array1 = arrayOf<Int>(1, 2, 3, 4)
println("array1: ${array1.contentToString()}")
val array2 = arrayOf("Red", "Green", "Blue")
println("arr: ${array2.contentToString()}")
}
Output:
array1: [1, 2, 3, 4]
array2: [Red, Green, Blue]
동일한 값으로 배열 초기화
Array(size) { value }
는 배열을 size
로 설정한 크기 만큼 생성하며, 요소들을 모두 설정한 value
로 할당한다.
fun main() {
val array = Array(3) { 20 }
println("array: ${array.contentToString()}")
}
Output:
array: [20, 20, 20]2
연속된 숫자로 배열 초기화
Array(size) { lambda }
는 배열을 size
로 설정한 크기 만큼 생성하며, 요소들을 모두 lambda
의 반환 값으로 설정된다.
lambda
에 전달되는 it
는 요소의 index
값이 되며, 아래와 같이 연속된 숫자로 배열을 초기화할 수 있다.
fun main() {
val array1 = Array(5) { it -> it }
println("array1: ${array1.contentToString()}")
val array2 = Array(5) { it -> it + 10 }
println("array2: ${array2.contentToString()}")
}
Output:
array1: [0, 1, 2, 3, 4]
array2: [10, 11, 12, 13, 14]
Null로 배열 초기화
arrayOfNulls<Type>(size)
로 null
로 가득찬 배열을 생성할 수 있다.
fun main() {
val array = arrayOfNulls<Int>(5)
println("array: ${array.contentToString()}")
}
Output:
array: [null, null, null, null, null]
기본 자료형 배열 선언
kotlin에는 IntArray
, BooleanArray
, DoubleArray
, LongArray
등, 기본 자료형 배열을 제공한다.
이런 배열을 생성할 때는 intArrayOf()
, booleanArrayOf()
등을 사용하여 생성할 수 있다.
fun main() {
val iniArray: IntArray = intArrayOf(1, 2, 3)
println("iniArray: ${iniArray.contentToString()}")
val booleanArray: BooleanArray = booleanArrayOf(true, true, false)
println("booleanArray: ${booleanArray.contentToString()}")
val doubleArray: DoubleArray = doubleArrayOf(1.2, 2.3, 3.4)
println("doubleArray: ${doubleArray.contentToString()}")
}
Output:
iniArray: [1, 2, 3]
booleanArray: [true, true, false]
doubleArray: [1.2, 2.3, 3.4]
주요 함수
forEach 함수
forEach
함수는 목록에 반복 처리를 할 수 있다.
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
// lambda으로 사용한 방법이다.
array.forEach({ element ->
print("$element,")
}) // => 1,2,3,4,5
println()
// 괄호'()'은 생략할 수 있다.
array.forEach { element ->
print("$element,")
}
println()
// it으로 람다를 대신하여 객체를 받아올 수 있다.
array.forEach {
print("$it,")
} // => 1,2,3,4,5
}
Output:
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
filter 함수
filter
함수는 목록에 조건을 걸어 그 조건에 맞는 새로운 목록을 반환한다.
fun main() {
val array = arrayOf(1, 2, 3, 4, 5) // => 1,2,3,4,5 배열을 생성한다.
// filter의 조건에 충족되는 함수를 반환한다.
array.filter({ e -> e % 2 == 0 }).forEach { println(it) } // => 2,4
// 괄호'()'은 생략할 수 있다.
array.filter { e -> e % 2 == 0 }.forEach { println(it) } // => 2,4
// lambda 사용하지 않고도 'it'으로 객체를 받아 올 수 이 있다.
array.filter { it % 2 == 0 }.forEach { println(it) } // => 2,4
}
Output:
2,4,
2,4,
2,4,
map 함수
map
함수는 목록의 요소를 변경하여 받아올 수 있다.
// 이름과 연령을 갖는 클래스 정의
private class Person(val name: String, val age: Int)
fun main() {
val array = arrayOf(
Person("Charlie", 20),
Person("devkuma", 31),
Person("kimkc", 42),
)
// lambda으로 user 인스턴스를 받아 올수 있다.
array.map({ user -> user.name }).forEach { print("${it},") }
println()
// 괄호'()'은 생략할 수 있다.
array.map { user -> user.name }.forEach { print("${it},") }
println()
// 'it'으로 객체를 받아 올 수 있다(이 'it'는 user 인스턴스를 가르킨다).
array.map { it.name }.forEach { print("${it},") }
}
Output:
Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,
sum 함수
sum
함수는 입력한 숫자를 합산한다.
fun main() {
// Array<Int> 인스턴스 생성한다.
val array = arrayOf(1, 2, 3, 4, 5)
// 합산한다(1 + 2 + 3 + 4 + 5).
println(array.sum()) // => 15
}
Output:
15
take 함수
take
함수는 목록의 요소를 입력한 숫자 만큼만 가져온다.
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
array.take(1).forEach { print(it) } // => 1
println()
array.take(2).forEach { print(it) } // => 1, 2
println()
array.take(3).forEach { print(it) } // => 1, 2, 3
println()
array.take(4).forEach { print(it) } // => 1, 2, 3, 4
println()
array.take(5).forEach { print(it) } // => 1, 2, 3, 4, 5
}
Output:
1
12
123
1234
12345
drop 함수
drop
함수는 목록의 요소를 앞에서 부터 입력한 숫자 만큼 제거하고 가져온다.
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
array.drop(1).forEach{print(it)} // => 2, 3, 4, 5
println()
array.drop(2).forEach{print(it)} // => 3, 4, 5
println()
array.drop(3).forEach{print(it)} // => 4, 5
println()
array.drop(4).forEach{print(it)} // => 5
println()
array.drop(5).forEach{print(it)} // => 빈 Array
}
Output:
2345
345
45
5