Kotlin/Kotlin문법

[Kotlin 문법] 배열(Array), 리스트(List), 셋(Set), 맵(Map)

Happy._. 2024. 4. 19. 11:43

배열(Array)

  • 기본타입 뒤에 Array를 붙여서 만들 수 있음
  • 문자열타입은 Array(개수, { item -> "할당할 값" } 으로 만들 수 있음
  • 고정 길이를 갖으며 늘리거나 줄일 수 없음

배열 선언

// 기본타입 배열 선언
val intArray = IntArray(10)
val longArray = LongArray(10)
val charArray = CharArray(10)
val floatArray = FloatArray(10)
val doubleArray = DoubleArray(10)

// 문자열타입 배열 선언 - String은 기본 타입이 아니기 때문에 StringArray가 없으므로 다음과 같이 사용
val stringArray = Array(10, {item -> ""}) // {item -> ""} -> 문자열 배열에 ""값 할당
val empty = emptyArray<String>()

// arrayOf 함수를 사용해서 선언과 동시에 값을 입력할 수 있음(반환 타입 생략 가능)
val dayArray: Array<String> = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")

 

데이터 클래스를 사용한 배열 선언

fun main() {
    val fruits = arrayOf(Fruit("Apple", 2.5), Fruit("Grape", 3.5))
    println(fruits.contentToString())
}

data class Fruit(val name: String, val price: Double)

 

배열에 값 추가

  • 배열명[인덱스] = 값
  • 배열명.set(인덱스, 값)
  • 배열의 범위를 벗어난 인덱스에 값을 할당하면 ArrayIndexOutOfBoundsException 발생
intArray[3] = 10
intArray.set(6, 20)

 

배열에 있는 값 꺼내기

  • 배열명[인덱스]
  • 배열명.get(인덱스)
println(intArray[3]) // 10
println(intArray.get(6)) // 20

 

배열의 요소 출력하기

  • 배열명.contentToString()
  • for in 구문 사용
  • 단순히 배열명으로 출력하면 주소값 출력
println(intArray) // [I@682a0b20

println(intArray.contentToString()) // [0, 0, 0, 10, 0, 0, 20, 0, 0, 0]

for (value in intArray) {
    println(value) // 0, 0, 0, 10, 0, 0, 20, 0, 0, 0
}

 

컬렉션(Collection)

  • 리스트(List), 맵(Map), 셋(Set)
  • 기본 컬렉션은 Immutable(변할 수 없음), Mutable(변할 수 있음)을 붙이면 동적 배열로 사용 가능
  • 동적 배열 : 배열과 다르게 크키를 고정하지 않고 임의의 개수를 담을 수 있음
  • 컬렉션의 값의 단위는 엘리먼트
    • 리스트 엘리먼트 = 리스트의 (값)
    • 맵 엘리먼트 = 맵의 (키와 값)

이뮤터블 컬렉션(Immutable Collection)

  • 컬렉션에서 mutable 이라는 접두어가 제거된 형태로 사용
  • 한 번 입력된 값을 변경할 수 없음
  • add나 set 함수는 지원 X
  • 최초 입력된 값만 사용 가능(추가, 수정, 제거 X)

리스트(List)

  • 저장되는 데이터에 인덱스를 부여한 컬렉션
  • 중복된 값 입력 가능
  • 동적 배열로 사용하기 위해 자료형 앞에 mutable을 추가
  • 배열과 같이 데이터 타입 Of 형태 사용 가능

리스트 생성 : mutableListOf

val stringList = mutableListOf<String>() // 빈 리스트 사용 - 타입을 명시해야 함
val mutableList = mutableListOf("MON", "TUE", "WED") // 값으로 추론할 수 있으므로 제네릭(<>) 생략 가능

 

리스트에 값 추가 : add

동적으로 리스트의 공간이 자동으로 증가

mutableList.add("THU") // boolean값을 반환, mutableList[3]에 추가됨

 

리스트에서 값 꺼내기 : get

println(mutableList.get(1)) // TUE

 

리스트 값 수정 : set

mutableList.set(2, "FRI") // WED - 이전 값이 반환됨

 

리스트에 입력된 값 제거 : removeAt

인덱스가 하나씩 감소하며 빈자리 인덱스로 이동

mutableList.removeAt(1) // TUE - 삭제된 값 반환

 

컬렉션 개수 가져오기

println(mutableList.size) // 3

 

셋(Set)

  • 중복을 허용하지 않는 리스트
  • 인덱스로 조회 X, get 함수 지원 X

셋 생성 : mutableSetOf

val set = mutableSetOf<String>()
val stringSet = mutableSetOf("MON", "TUE", "MON")

println(stringSet) // [MON, TUE]

 

셋에 값 추가 : add

set.add("MON") // boolean값 반환
set.add("TUE")
set.add("MON") // 이미 존재하는 값으로 입력 X

println(set) // [MON, TUE]

 

셋의 값 삭제 : remove

set.remove("TUE") // boolean값 반환

 

맵(Map)

  • 키(Key)와 값(Value)의 쌍으로 입력되는 컬렉션
  • 인덱스에 해당하는 키를 직접 지정해서 사용
  • 제네릭으로 키와 값의 데이터 타입을 지정해서 맵을 생성

맵에 값 추가 : put

키와 값을 추가할 때마다 리스트처럼 맵의 공간이 늘어남

map.put("key1", "value2")
map.put("key2", "value2")
map.put("key3", "value3")

 

맵에서 값 꺼내기 : get

println(map.get("key2")) // value2, 없는 key이면 null 반환

 

맵의 값 수정 : put

map.put("key3", "value333") // key3에 입력되어 있던 값을 반환
println(map) // {key1=value2, key2=value2, key3=value333}

 

맵의 값 삭제 : remove

map.remove("key2") // 삭제된 key의 값 반환
println(map) // {key1=value2, key3=value333}

 

'Kotlin > Kotlin문법' 카테고리의 다른 글

[Kotlin 문법] 함수  (0) 2024.04.23
[Kotlin 문법] 반복문  (1) 2024.04.19
[Kotlin 문법] 조건식(if, when)  (0) 2024.04.14
[Kotlin 문법] 변수 & 기본 데이터 타입(자료형)  (0) 2024.04.14