배열
코틀린에서 배열 구조를 구현하는 가장 일반적인 코틀린 타입은 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
'Kotlin > Kotlin완벽가이드' 카테고리의 다른 글
Kotlin - 코틀린 (2) 기본 문법 (0) | 2022.12.22 |
---|---|
Kotlin - 코틀린 (1) Kotlin 코틀린 은 무엇인가? (0) | 2022.12.20 |