도토리 줍는 개발자 감자
Kotlin 코틀린 Arrays 배열 (기본기) - jimoo 본문
https://kotlinlang.org/docs/basic-types.html#arrays
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 역할을 한다. )
- 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) 같은게 나옴! 그러면 배열 데이터값을 출력하고 싶을 경우에는?
4.1) forEach { println(it) }
// 데이터 값을 한 줄에 출력하고 싶을 때
배열이름.forEach { print(it) }
// 각 배열 인덱스에 있는 데이터 값을 각 줄마다 출력하고 싶을 때
배열이름.forEach { println(it) }
4.2) contentToString() : 배열 형태로 출력한다.
println(배열이름.contentToString())
4.3) joinToString("문자열") : 각 배열 인덱스에 존재하는 값을 "문자열" 과 연결하여 출력한다.
println(배열이름.joinToString("문자열"))
'코틀린(Kotlin)공부' 카테고리의 다른 글
Kotlin 코틀린 Any란? - jimoo (0) | 2021.10.22 |
---|---|
Kotlin 코틀린 변수타입 (기본기) - jimoo (0) | 2021.09.28 |
Kotlin 코틀린 변수선언 (기본기) - jimoo (0) | 2021.09.26 |
Kotlin 시작 IntelliJ 다운로드 mac - jimoo (0) | 2021.09.23 |