Kotlin/Kotlin완벽가이드

Kotlin - 코틀린 (3) 배열

주톨 2022. 12. 28. 01:09
728x90

 

 

배열

코틀린에서 배열 구조를 구현하는 가장 일반적인 코틀린 타입은 Array<T>

 

 

배열생성

val a = emptyArray<String>()
val b = arrayOf("hello", "world")
val c = arrayOf(1,4,9)

 

a의 emptyArray<String>   <String>은 배열의 타입을 지정해준것이다.

a만 배열타입을 지정해준 이유는 b와 c는 생성과 동시에 초기화를 하였기에 코틀린의 타입 추론 덕분에 타입을 유추할 수 있기 때문에 b와 c는 배열의 탕비을 지정해주지 않아도 된다.

 

a는 비어있는 배열을 만들고 초기화를 안했기 때문에 이 배열이 무엇을 담는 배열인지 타입 추론을 할 수 없기 때문에

<String> 이라고 타입 지정을 해준것이다.

 

 

 

배열 사용하기

 

//배열은 0번째 인덱스부터 시작
//[0] 1 // [1] 4 // [2] 9 // [3] 16
val list = arrayOf(1, 4, 9, 16)
list.size       //4    리스트의 사이즈를 반환
list.lastIndex  //3    리스트의 마지막 인덱스를 반환
list[3]         //16   리스트의 3번째 인덱스 값을 반환
list[1]         //4    리스트의 1번째 인덱스 값을 반환
list[4]         //IndexOutOfBoundsException 에러 잘못된 인덱스 사용

 

배열의 상태 변경

list[2] = 100   // list: 1, 4, 100, 16
list[3] += 9    // list: 1, 4, 100, 25
list[0] --      // list: 0, 4, 100, 25

** 코드를 보면 val로 생성한 list의 상태를 변경할 수 있는데 이는 코틀린에서는 참조타입을 가지는 변수는 참조하는 객체의 상태를 변경할 수 있기 때문입니다. 쉽게 말해 list는 자기 주소를 알고 있기때문에 직접 주소로 가서 상태를 변경하는 것입니다.

 

 

배열의 공유

val secondList = list
secondList[0] = 100    //바뀐 데이터가 list와 secondList에 공유됨
println(list[0])       //100

 

 

배열의 복사

별도의 배열을 만들고 싶다면 copyOf() 함수를 사용해야 함.

copyOf()는 필요시에 다른 크기의 배열을 만들기도 한다.

 

val secondList = list.copyOf()
secondList[0] = 100        //list에는 영향이 없다.

list.copyOf(2)  //앞에서 2개복사 나머지는 버려진다.
list.copyOf(5)  //앞에서 5개복사 부족한 부분은 0으로 채워진다.

 

 

배열의 비교

문자열과 달리 배열에 대한 == 와 != 연산자는 원소 자체를 비교하지 않고 참조(주소)를 비교한다.

arrayOf(1, 2, 3) == arrayOf(1, 2, 3)   // false

 

배열의 내용을 비교하고 싶으면 contentEquals() 함수를 사용해야 합니다.

arrayOf(1, 2, 3).contentEquals(arrayOf(1, 2, 3))  // true

 

 

배열이 비었는지 검사하고 싶으면 isEmpty() 함수를 사용해야 합니다.

arrayOf(1, 2).isEmpty()  // false

 

배열에 원소가 있는지 검사하고 싶으면 isNotEmpty() 함수를 사용해야 합니다.

arrayOf(1, 2).isNotEmpty()  // true

 

 

인자와 일치하는 최초의 배열 아이템의 인덱스를 반환도 할 수 있습니다.

(일치하는 원소가 있다면 해당 원소의 인덱스 값을 반환 ,  없다면 -1 을 반환 합니다.)

arrayOf(1, 2, 3).indexOf(3)  // 2
arrayOf(1, 2, 3).indexOf(4)  // -1