배열을 초기화하는 방법을 간단하게 체크 하려고합니다. 특히 생성자를 활용한 배열 생성에 초점을 두려고 합니다.       1. 배열(Array) 생성  (1) emptyArray 비어있는 배열 객체를 생성합니다. size 는 0 을 가집니다. va...

[안드로이드] 코틀린 배열 초기화 (생성자 활용)

 

배열을 초기화하는 방법을 간단하게 체크 하려고합니다.

특히 생성자를 활용한 배열 생성에 초점을 두려고 합니다.

 

 

 

1. 배열(Array) 생성

 (1) emptyArray

비어있는 배열 객체를 생성합니다. size 는 0 을 가집니다.

val emptyArray = emptyArray<Int>()

 

 (2) arrayOf

지정한 값을 가지는 배열 객체를 생성합니다.

val arrayOf = arrayOf(0, 1)

 

 (3) arrayOfNulls

지정한 크기만큼 배열 객체를 생성합니다. 배열값은 null 로 초기화합니다.

val arrayOfNulls: Array<Int?> = arrayOfNulls(10)

 

 (4) Array 생성자

지정한 크기만큼 배열 객체를 생성합니다. 배열값은  init function 의 반환값으로 초기화합니다.

val array: Array<Int> = Array(10) { i ->
Log.d("init function", "i : $i")
i
}

 

 

2. arrayOfNulls vs Array 생성자

arrayOfNulls 로 배열을 생성한 경우 데이터 타입은 Array<Int?> 입니다.

Array 로 배열을 생성한 경우 데이터 타입은 Array<Int> 입니다.


data class Number(var value: Int, var valueString: String)

 

Number 라는 데이터 클래스를 가지는 배열을 생성한다고 가정했을때,

(상황에 따라 다르겠지만) 해당 데이터를 활용할 때 arrayOfNulls 의 경우 

아래와 같이 계속해서 null check 를 해줘야하는 번거로움이 있습니다.

 

        for (i in arrayOfNulls.indices) {
// arrayOfNulls: Array<Number?> : null 값으로 초기화되었기때문에 null 체크를 해줘야합니다.
value = arrayOfNulls[i]?.value!!
valueString = arrayOfNulls[i]?.valueString!!
}

for (i in array.indices) {
// array: Array<Number> : 초기화때 배열크기만큼 초기화되었기때문에 null 체크가 필요없습니다.
value = array[i].value
valueString = array[i].valueString
}

 

 

저 같은 경우 배열 사용할 때 arrayOfNulls 를 주로 사용해왔습니다.

사실 문제될건 없지만.. 값을 불러올 때마다 null check 가 너무 불편했던거 같아요

꼭 null 로 초기화해서 사용할 필요가 없다면

Array 생성자를 활용해야겠다는 생각이 들어서 정리하였습니다.

끝으로 아래 전체소스 참조로 넣고 마무리하겠습니다.



class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// 지정한 size 만큼 배열 객체 생성 (배열값은 null 로 초기화)
val arrayOfNulls: Array<Number?> = arrayOfNulls(10)
for (i in arrayOfNulls.indices) {
arrayOfNulls[i] = Number(i, i.toString())
}

// 지정한 size 만큼 배열 객체 생성 (배열값은 init function 반환값으로 초기화)
val array: Array<Number> = Array(10) { i ->
Log.d("init function", "i : $i")
Number(i, i.toString())
}

var value = 0
var valueString = ""

for (i in arrayOfNulls.indices) {
// arrayOfNulls: Array<Number?> : null 값으로 초기화되었기때문에 null 체크를 해줘야합니다.
value = arrayOfNulls[i]?.value!!
valueString = arrayOfNulls[i]?.valueString!!
}

for (i in array.indices) {
// array: Array<Number> : 초기화때 배열크기만큼 초기화되었기때문에 null 체크가 필요없습니다.
value = array[i].value
valueString = array[i].valueString
}
}

data class Number(var value: Int, var valueString: String)
}

 

 

 

0 comments: