오늘 벌써 글만 3개째이다.
공부량이 많은 만큼 좋다고 생각한다.
오늘도 역시 깡샘의 안드로이드를 출처로 한다.
오늘 배울 것은 코틀린의 컬렉션 타입이다.
Array - 배열 표현
코틀린의 배열은 Array라고 표현하며,
첫 번째 매개변수는 배열의 크기를 지정하며,
두 번째 매개변수는 초기값을 지정하는 함수이다.
<int>(size: Int, init: (int) -> T)
예를 들어 이렇게 선언할 수 있다.
val data: Array<Int> = Array(3, { 0 })
배열의 데이터에 접근할 때는 대괄호([])나 set(), get() 함수로 값을 넣어주거나 가져올 수 있다.
fun main() {
val data1: Array<Int> = Array(3, { 0 })
data1[0] = 10
data1[1] = 20
data1.set(3, 30)
println(
"""
array size : ${data1.size}
array data : ${data1[0]}, ${data1[1]}, ${data1.get(2)}
"""
)
///결과
//array size : 3
//array data : 10, 20, 30
}
기초 타입의 배열
보통은 Array<Int> 이런 식으로 제네릭 사이에 타입을 넣어 사용을 합니다.
하지만 데이터가 기초 타입이면 Array를 사용하지 않고, 기초 타입을 나타내는 클래스를
사용할 수 있습니다.
BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray가 있습니다.
val data1: IntArray = IntArray(3, { 0 })
val data2: BooleanArray = BooleanArray(3, { false })
또한, arrayOf()라는 함수를 사용하게 되면 선언할 때 값을 할당할 수 있습니다.
fun main() {
val data1 = arrayOf<Int>(10, 20, 30)
println(
"""
array size : ${data1.size}
array data : ${data1[0]}, ${data1[1]}, ${data1.get(2)}
"""
)
///결과
//array size : 3
//array data : 10, 20, 30
}
arrayOf() 함수도 기초 타입을 대상으로 하는
booleanArrayOf(), byteArrayOf(), charArrayOf(), doubleArrayOf(),
floatArrayOf(), intArrayOf(), longArrayOf(), shortArrayOf()가 있습니다.
val data1 = intArrayOf(10, 20, 30)
val data1 = booleanArrayOf(true, false, true)
List, Set, Map
이 세가지는 Collection 인터페이스를 타입으로 표현한 클래스이며, 컬렉션 타입 클래스라고 합니다.
- List: 순서가 있고, 데이터의 중복을 허용한다
- Set: 순서가 없고, 데이터의 중복을 허용하지 않는다.
- Map: 키와 값으로 이루어져 있고, 순서가 없으며, 키의 중복을 허용하지 않는다.
Collection 타입의 클래스는 가변(Mutable) 클래스와 불변(Immutable) 클래스로 나뉩니다.
가변 클래스는 초깃값을 대입한 이후에도 값을 추가하거나 변경할 수 있고,
불변 클래스는 초깃값을 대입한 이후에는 더 이상 변경할 수 없는 클래스입니다.
List는 MutableList, Set은 MutableSet, Map은 MutableMap이 있습니다.
구분 |
타입 |
함수 |
특징 |
List |
List |
listOf() |
불변 |
MutableList |
mutableListOf() |
가변 |
Set |
Set |
setOf() |
불변 |
MutableSet |
mutableListOf() |
가변 |
Map |
Map |
mapOf() |
불변 |
MutableMap |
mutableMapOf() |
가변 |
listOf() 함수로 초깃값을 넣어줄 수도 있습니다.
배열과 마찬가지로 대괄호나 set, get함수를 사용할 수 있습니다.
fun main() {
var data = listOf<Int>(10, 20, 30)
println(
"""
array size : ${data1.size}
array data : ${data1[0]}, ${data1[1]}, ${data1.get(2)}
"""
)
///결과
//array size : 3
//array data : 10, 20, 30
}
mutableListof()는 데이터를 추가하거나 변경할때, add() 나 set()을 이용할 수 있습니다.
fun main() {
var data = mutableListOf<Int>(10, 20, 30)
data.add(3, 40)
data.set(0, 50)
println(
"""
array size : ${data1.size}
array data : ${data1[0]}, ${data1[1]}, ${data1.get(2)}, ${data1.get(3)}
"""
)
///결과
//array size : 4
//array data : 50, 20, 30, 40
}
Map은 조금 형태가 다릅니다.
키와 값으로 이루어진 데이터 집합이기 때문에
Pair 객체를 이용할 수 있고, 혹은 (키 to 값) 형태로 사용합니다.
fun main() {
var map = mapOf<String, String>(Pair("one", "Hello"), "two" to "world")
println(
"""
map size : ${map.size}
map data : ${map.get("one"), ${map.get("two")}}
"""
)
//결과
//map size : 2
//map data : hello, world
}
이런 식으로 4가지의 컬렉션 타입에 대해 알아보았습니다.