반응형
1. 원시타입, 참조타입 배열
- 원시 타입 primitive type : 컴퓨터 CPU가 즉시 이해할 수 있는 값 = 메모리상에 존재하는 타입
-> 코틀린에서는 모든 대상을 객체처럼 취급할 수 있다.
(내가 가장 이해하기 어려웠던 부분.... 정리...)
! 모든 대상을 객체처럼 취급하여 발생하는 문제점
Array<Int> 같은 배열 타입의 값인 경우 배열 내부에 저장할 값의 타입을 알 수 없다.
이런 경우 컴파일러는 가장 안전한 방식... 런타임에 문제가 생기지 않는 방식을 택해야 한다.
-> 배열의 원소로는 32비트 정수 값이 아니라 정수 값 객체를 가리키는 참조 reference를 사용할 수 밖에 없다.
이 부분이 내가 공부를 아직 얕게 했다고 느끼게 해준 부분이었다. 질문이 많이 생겼지만 읽으면서 생긴 질문들은 차차 해결하도록 하고 내용에 집중해보려고 했다.
75페이지에 있는 예시를 보며 이해해보려고 하였다.
val arrayOf1to4 = arrayOf(1, 2, 3, 4)
Int 객체를 가리키는 참조가 4개 들어있는 배열 객체가 1개 생기고 1, 2, 3, 4 가 들어있는 Int 타입 객체가 생긴다는 뜻이다..?
배열 자체에는 객체를 가리키는 참조만 들어가고 실제 객체는 힙 heap 안의 다른 위치에 저장된다.
참조를 통해 간접적으로 객체에 접근해야 하는 배열을 참조 배열 reference array 이라 한다.
String 을 제외한 코틀린 기본 타입들의 경우 객체로는 쓰이지 않고 원시타입으로만 쓰일 수 있다.
-> 배열 안에 참조를 저장하지 않고 즉시 값을 저장해서 불필요한 부가 비용을 피할 수 있다........
원시 타입 값을 연속적으로 저장한 배열을 원시 배열 primitive array 이라 한다.
타입 | 배열 생성 방법 |
ByteArray | byteArrayOf(...) |
ShortArray | shortArrayOf(...) |
IntArray | intArrayOf(...) |
LongArray | longArrayOf(...) |
CharArray | charArrayOf(...) |
BooleanArray | booleanArrayOf(...) |
FloatArray | floatArrayOf(...) |
DoubleArray | doubleArrayOf(...) |
추가로 부호 없는 정수 타입에 대한 원시 타입 배열도 제공한다.
2. 배열 기본 연산
- 코틀린은 객체지향 언어이다.
그러므로 멤버 프로퍼티를 활용하거나 멤버 함수를 활용한다.
배열.size 프로퍼티
fun main(){
val x = arrayOf(1, 2, 3)
println(x.size)
}
배열.lastIndex, 배열.indices
* 배열의 마지막 index를 얻거나 index 범위를 얻을 수 있다.
fun main(){
val array = intArrayOf(1, 2, 3, 4, 5)
val lastIndex = array.lastIndex
val indices = array.indices
println(lastIndex == indices.last)
println(lastIndex == array.size - 1)
println(0 == indices.first)
}
for ... in
* 배열의 원소를 차례로 변수에 담아 사용 할 수 있다.
fun main(){
val x = arrayOf(1, 2, 3)
val y = arrayOf(1, 2, 3)
for(i in x){
for(j in y){
println("$i * $j = ${i*j}")
}
}
}
in
* 배열에 들어있는지 판단할 수 있다.
fun main(){
val x = intArrayOf(1, 2, 3)
println(1 in x) //true
println(5 in x) //false
}
반응형
'스터디 > Kotlin' 카테고리의 다른 글
[ 스터디 ] 코틀린 : 함수 2 (0) | 2023.05.10 |
---|---|
[ 스터디 ] 코틀린 : 함수 (0) | 2023.05.10 |
[ 스터디 ] 코틀린 : 식과 연산자, 배열 (0) | 2023.05.09 |
[ 스터디 ] 코틀린 : for, while, do ... while (0) | 2023.05.09 |
[ 스터디 ] 코틀린 : if, when (0) | 2023.05.08 |