본문 바로가기

Language/Kotlin

[Kotlin] Array & List 특징과 사용법

📝 학습목표 : 배열과 리스트의 특징 및 사용법을 알아보자.

 

 

 

배열(Array)

✔ 배열은 정해져 있는 사이즈가 있다. 메모리가 이미 할당되어 나오기 때문에 처음에 크기를 지정해줘야 한다.

코틀린에서 배열은 arrayOf 함수를 사용하여 초기화할 수 있다.

 

위 코드에서 array는 정수형 요소를 갖는 배열로 초기화되었다. 배열의 요소는 인덱스를 사용하여 접근할 수 있고 배열은 변경 가능한(mutabale) 구조이기 때문에 배열의 값은 변경할 수 있고 사이즈는 변경할 수 없다.

//배열의 값 변경 가능
array[0] = 3

 

array와 list 둘 다 타입을 통일하지 않아도 된다. <Any> 타입도 가능하다.

 

 

 

 

 

리스트(List)

✔ 리스트는 배열과 달리 크기를 변경하고 요소를 추가하거나 제거할 수 있다.

✔ 코틀린은 1. List 2. MutableList 두 가지가 있다. List는 수정이 불가능하고(읽기만 가능) MutableList는 수정이 가능하다.

     listOf 함수로 불변(immutable) 리스트와 mutableListOf 함수로 변경 가능한 리스트를 초기화할 수 있다.

 

 

1. List

위 코드에서 list는 정수형 요소를 갖는 불변 리스트로 초기화되었다. 불변 리스트는 리스트의 요소를 수정할 수 없는 읽기 전용이다.

//값 변경 불가능(읽기 전용)
list[0] = 2

//가져오기는 가능
var result = list.get(0)

 

🔎 List interface

list의 interface를 보면 get은 가능하지만 set은 불가능하다. (참고: listOf를 command로 누르면 List interface에 접근할 수 있다.)

 

 

 

2. MutableList

MutableList는 문자열 요소를 갖는 변경 가능한 리스트로 초기화되었다. 이 리스트는 요소를 추가하거나 수정, 제거할 수 있다.

 

🔎 MutableList interface

MutableList의 interface에는 add, remove, set이 포함되어 있어 값을 수정할 수 있다. 

 

MutableList의 가장 대표적인 것이 arrayList이다. arrayList를 사용해서 MutableList를 만들어보고 주의사항을 알아보자.

 

 

 

리스트(List) 사용시 주의사항

리스트를 사용할 때 주의해야 할 점은 변경 가능한 리스트를 사용할 때 var 키워드로 변수를 선언하면 해당 변수의 참조값은 변하지 않더라도 리스트 내부의 요소는 변경될 수 있다. 이 경우에는 val 키워드로 변수를 선언하여 참조가 변하지 않도록 주의해야 한다.

//arrayListOf로 초기화한다.
val arrayList = arrayListOf<Int>()
    //arrayList에 10과 20을 추가한다.
    arrayList.add(10)
    arrayList.add(20)
    //0번째 인덱스를 20으로 바꾼다.
    arrayList[0] = 20

    println(arrayList)
}

//Output: [20, 20]

위 코드에서 arrayList는 값이 변경 가능한 리스트이므로 요소를 수정할 수 있다. 그러나 arrayList의 참조값은 변하지 않기 때문에 val 키워드로 선언된다.

 

 

추가 설명)

코틀린에서 리스트를 사용할 때 변경 가능한(mutable) 리스트를 선언하고 요소를 수정할 수 있다.

위 코드에서 arrayList는 변경 가능한 리스트로 선언되었다. 따라서 arrayList 변수는 변경되지 않고 리스트 내부의 요소는 변경되었다.

이때 변수를 val로 선언해도 리스트 내부의 요소가 변경된다. 변수의 참조가 변하지 않았기 때문이다.

만약에 리스트의 참조 자체가 변경된다면 ex. arrayList = anotherList와 같이 변수 재할당에 해당하므로 변수를 val로 선언했더라도 오류가 발생한다.

따라서 변경 가능한 리스트를 사용할 때는 변수의 참조가 아닌 리스트 내부의 요소가 변경되는 것에 주의해야 한다.

 

 

 

 

 

참고 자료⎜https://www.youtube.com/watch?v=IDVnZPjRCYg