도토리 줍는 개발자 김지무

Kotlin 코틀린 Arrays 배열 (기본기) - jimoo 본문

코틀린(Kotlin)공부

Kotlin 코틀린 Arrays 배열 (기본기) - jimoo

지무 2021. 10. 6. 18:24
728x90
반응형

https://kotlinlang.org/docs/basic-types.html#arrays

 

Basic types | Kotlin

 

kotlinlang.org

Arrays in Kotlin are represented by the Array class. It has get and set functions that turn into [] by operator overloading conventions, and the size property, along with other useful member functions:

-> 코틀린에서 배열은 Array 클래스로 표현된다. Array 클래스는 연산자 오버로딩 규칙에 의해 []로 나타나지는 get()과 set()함수가 있다. 그리고 size 속성 등 다른 유용한 멤버함수들이 있다. ([]이 set과 get function 역할을 한다. ) 

 

Kotlin Array Class
Array의 get과 set 함수

- get(index: Int) : 배열의 특정 인덱스에 해당하는 element를 return 해준다.     => (배열명[인덱스]) 로 작성가능

- set(index: Int, value: T) : 배열의 인덱스 위치에 value 값을 넣어준다.             => (배열명[인덱스] = value) 로 작성가능

 

 

1. 배열 선언 방법 - arrayOf()

배열을 선언하는 동시에 배열에 데이터를 넣을 수 있는 방법이다.

var 변수명 = arrayOf(value1, value2, value3,..)

=> [value1, value2, value3,...] 를 생성한다.

 

배열 선언 예시

var arr1 = arrayOf(1, 2, 3)
// 또는 var arr1: Array<Int> = arrayOf(1, 2, 3)

var arr2 = arrayOf('a','b','c')
// 또는 var arr2: Array<Char> = arrayOf('a','b','c')

var arr3 = arrayOf("jimoo","dog","apple")
// 또는 var arr3: Array<String> = arrayOf("jimoo","dog","apple")

2. 배열 선언 방법 - arrayOfNulls()

the arrayOfNulls() function can be used to create an array of a given size filled with null elements.

배열을 선언하면서 초기화할 수 없을 때, 특정 자료형의 배열을 원하는 크기만큼 null로 초기화하여 만들어준다.

var 변수명 = arrayOfNulls<변수타입>(배열크기)

=> [null, null, null, ... ]
=> 자료형: Int, String, Number, Any 등

** Any: Any는 데이터타입(Int, String, Number 등 )을 표현하는 클래스의 최상위 클래스이다. Any로 선언할 시 모든 타입의 데이터가 대입가능하다.

 

배열 선언 예시

var nullarr = arrayOfNulls<Int>(40)
var nullarr1 = arrayOfNulls<String>(30)

 

3. 배열 선언 방법 - Array 생성자

1. Array(배열크기)
   ex) var arr = Array(5) {i->0}    // [0,0,0,0,0] 
2. Array<변수타입>(배열크기) {람다식표현} 
    ex) var arr = Array<Int>(5) {i->0}    // [0,0,0,0,0] 

 

예시

** 추가내용 **

Arrays in Kotlin are invariant. This means that Kotlin does not let us assign an Array<String> to an Array<Any>, which prevents a possible runtime failure (but you can use Array<out Any> )

=> 코틀린에서 Array는 invariant하다. Array<String>으로 할당하고 Array<Any>로 접근할 경우 런타임 에러가 발생한다.

아래는 설명을 돕기위한 예시 코드이다. 

fun copy(from: Array<Any>, to: Array<Any>) {
    assert(from.size == to.size)
    for (i in from.indices)
        to[i] = from[i]
}
fun main(){
    val ints: Array<Int> = arrayOf(1, 2, 3)
    val any = Array<Any>(3) { "" }
    copy(ints, any)			//에러발생!!!
}

==> copy(ints, any) 코드에서 ints에 에러발생

Kotlin: Type mismatch: inferred type is Array<Int> but Array<Any> was expected

copy함수에서 매개변수 타입이 Array<Any> 으로 선언되었는데 main 함수에서 Int 형을 가지는 배열(ints)로 copy 함수를 접근해서 에러가 생긴 경우이다. 

(참조: https://kotlinlang.org/docs/generics.html#use-site-variance-type-projections)

 

4. 배열 값 출력 방법 

Kotlin의 배열은 Array Class 클래스로 표현되기 때문에 배열 arr1을 println(arr1)으로 접근하면 배열 데이터 값이 아닌 객체주소(Ljava.lang.Integer;@4517d9a3) 같은게 나옴! 그러면 배열 데이터값을 출력하고 싶을 경우에는?

배열 print 예제

 

4.1) forEach { println(it) }

// 데이터 값을 한 줄에 출력하고 싶을 때
배열이름.forEach { print(it) } 

// 각 배열 인덱스에 있는 데이터 값을 각 줄마다 출력하고 싶을 때
배열이름.forEach { println(it) } 

 

123 출력

4.2) contentToString() : 배열 형태로 출력한다.

println(배열이름.contentToString())

 

[1, 2, 3] 출력

4.3) joinToString("문자열") : 각 배열 인덱스에 존재하는 값을 "문자열" 과 연결하여 출력한다.

println(배열이름.joinToString("문자열"))

 

1---2---3 출력

 

728x90
반응형
Comments