본문 바로가기
컴퓨터 언어/Kotlin

[Kotliln] 배열 사용법과 주의사항

by 웅대 2022. 11. 16.
728x90
반응형
배열의 선언과 초기화를 동시에

arrayOf를 사용하여 배열의 선언과 초기화를 동시에 할 수 있다.

val arr = arrayOf<Int>(1,2,3,4,5)
val arr2 = arrayOf<String>("Hello", "world)

코틀린의 배열은 다른 언어와 마찬가지로 인덱스는 0부터 시작하고 인덱스를 사용하여 접근할 수 있다.

타입의 경우 적지 않고 arrayOf(1,2,3,4) 이렇게 사용해도 무관하지만 뜻의 모호함을 피하기 위해서 적어두는 것이 좋다.

ex) print(arr[1]) 결과 : 2

 

비어있는 배열도 만들 수 있다.

 val a = emptyArray<String>()

 

람다 함수를 사용하여 배열 초기화

예를 들어서 길이가 10이고 2 부터 20까지 2의 배수로 이루어진 배열을 만들고 싶다고 하자.

다음과 같이 람다 함수를 사용하면 한 줄로 표현할 수 있다.

val squares = Array(10){(it + 1)*2}

it는 iterator(반복자)의 약자로 쉽게 생각하면 그냥 배열의 모든 인덱스를 반복으로 가져온다고 보면 된다.

길이가 10인 배열이므로 it는 0부터 9까지 차례대로 들어가게 된다.

 

배열의 복사

arr라는 배열을 arr2로 복사하고  싶을 때 다음과 같이 하면 문제가 발생할 수 있다.

val arr2 = arr

원본 배열인 arr의 값들이 복사가 되는 것이 아니라 arr2는 arr 배열의 원본 주소를 가리키게 된다.

즉 arr2와 arr는 같은 주소를 가리키고 있고 arr2의 값을 바꾸면 arr의 값 또한 바뀌게 된다.

 

그래서 배열을 복사하려면 copyOf라는 함수를 사용한다.

val arr2 = arr.copyOf()

배열의 내용을 비교할 때도 조심해야 한다.

다음과 같이 "==" 과 "!="을 사용해서 배열을 비교하면 객체가 동일한지 확인하는 것이다.

위에서 val arr2=arr를 사용한다면 arr2와 arr는 동일 객체를 가리키고 있으므로 같은 객체로 판단한다.

 

같은 값을 지니고 있는지 확인하기 위해서는 contentEquals라는 메소드를 사용해야한다.

arr2.contentEquals(arr))
728x90
반응형

댓글