이번 글에서는 코틀린에서의 배열에 대해 알아볼 것이다.
배열구조를 구현하는 가장 일반적인 코틀린 타입은 Array <Type>이다.
val a= emptyArray<String>() //Array<string>원소 0개
val b = arrayOf("Hello", "world") //Array<string> 원소 2개
val c= arrayOf(1,4,9)//Array<int> 원소 3개
호출할 때 원소의 타입을 따로 지정하지 않아도 타입 추론 덕분에 함수 호출의 인자 타입을 알아낼 수 있다.
인덱스를 사용해서 배열의 원소를 만들어내는 방법도 있다.
val size= readLine()!!.toInt() //null값이 입력된다면 null을 반환해줘라.
val s= Array(size){(it+1) *(it+1)} //각 배열의 인덱스에 (인덱스+1)^2값이 들어가게됨.
Array <Int>를 사용하는 배열은 제대로 작동하지만 모든 수를 박싱 하기 때문에 그다지 실용적이지 못한 해법이다.
이러한 이유로 코틀린은 더 효율적인 배열 타입을 제공한다.
- ByteArray
- ShortArray
- IntArray
- LongArray
- FloatArray
- DoubleArray
- CharArray
- BooleanArray
⚡자바 VS 코틀린
코틀린에는 new 연산자가 없기 때문에 배열 인스턴스 생성이 일반 함수처럼 보인다. 코틀린에서는 배열 원소를 명시적으로 초기화해줘야 한다.
배열 타입은 이전에 알아본 문자열 타입과 꽤 비슷하다.
특히 size(문자열의 length에 해당)와 lastIndex 프로퍼티가 있다는 점과 인덱스 연산으로 원소에 접근할 수 있다는 점이 비슷하다.
잘못된 인덱스를 사용하면 런타임에 IndexOutOfBoundsException 예외가 발생한다.
kotlin에서 배열의 선언은 arrayOf를 사용한다.
문자열과 비슷해 보이지만 다른 점이 있다. 문자열은 원소를 변경할 수 없지만, 배열은 원소를 인덱스에 접근해서 변경할 수 있다.
자바와 마찬가지로 배열 타입의 변수 자체에는 실제 데이터에 대한 참조를 저장한다. 이로 인해 배열 변수에 다른 배열을 대입하면 같은 데이터 집합을 함께 공유한다.
원본과 별도로 배열을 만들고 싶다면 copyOf()를 사용해야 한다. copyOf는 필요시 사이즈를 조절할 수 있다.
배열 타입이 이미 정해져 있다면 다른 타입의 배열을 대입할 수 없다.
예를 들어 var a= arrayOf(1,4,9,16)인 int 타입의 배열에 a=arrayOf("hello", "world")를 대입할 수 없다. [컴파일 오류가 발생함.]
배열을 생성하고 나면 길이를 바꿀 수는 없지만 + 연산을 사용해 원소를 추가한 새로운 배열을 만들 수 있다.
문자열과 달리 배열에 대한 ==와!=연산자는 원소 자체를 비교하지 않고 참조를 비교한다.
따라서 배열 내용을 비교하고 싶다면 contentEquals() 함수를 사용해야 한다.
배열을 사용할 때 사용하는 표준 함수
- isEmpty() : 배열이 비었는지 검사.
- 비었다면 true를 반환, 비어있지 않다면 false를 반환함
- isNotEmpty(): 배열에 원소가 있는지 검사.
- 있다면 true를 반환, 비어있지 않다면 false를 반환함.
- indexOf : 인자와 일치하는 최초의 배열 아이템의 인덱스를 반환(일치하는 원소가 없다면 -1을 반환)
- ex) arrayOf(1,2,3). indexOf(2) -> 2가 들어있는 인덱스인 1을 반환함.
'Skils > Kotlin' 카테고리의 다른 글
[Kotlin] 오버로딩과 디폴트값 (0) | 2022.08.10 |
---|---|
[Kotlin] 함수란? (0) | 2022.08.07 |
[Kotlin] char & String (0) | 2022.07.30 |
[Kotlin] 기본 문법 (1) | 2022.07.26 |
[Kotlin] 코틀린 생태계 (0) | 2022.07.21 |