안드로이드 개발자의 창고
[19일차 Kotlin] 배열(Arrray) 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 배열(Arrray)
- 연속된 기억공간을 확보하여 값 들을 저장하고 관리하는 자료 구조를 의미한다.
- 배열은 0 부터 시작되는 인덱스 번호로 관리한다.
-
Kotlin에서는 다양한 타입의 값을 배열에 담을 수 있으며 한 가지 타입으로 제한하여 값을 담을 수도 있다.
📖 예제 코드
arrayOf()를 이용한 배열 생성
fun main() {
val array1 = arrayOf(10, 20, 30, 40, 50)
println("array1 : $array1") // array1의 ID 값
println("array1 : ${array1.contentToString()}") // [10, 20, 30, 40, 50]
var array2 = arrayOf(100, 11.11, "문자열", true)
println("array2 : ${array2.contentToString()}") // [100, 11.11, 문자열, true]
val array3 = intArrayOf(10, 20, 30, 40, 50)
val array4 = doubleArrayOf(11.11, 22.22, 33.33, 44.44, 55.55)
val array5 = arrayOf<String>("문자열1", "문자열2", "문자열3")
println("array3 : ${array3.contentToString()}") // [10, 20, 30, 40, 50]
println("array4 : ${array4.contentToString()}") // [11.11, 22.22, 33.33, 44.44, 55.55]
println("array5 : ${array5.contentToString()}") // [문자열1, 문자열2, 문자열3]
}
✔️ 코드 해석
- val array1 = arrayOf(10, 20, 30, 40, 50)
- 래퍼 클래스인 Integer 타입의 배열을 생성하여 요소를 저장한다.
- Integer 타입의 객체를 하나씩 만들어 객체의 ID 값이 저장되기 때문에 메모리를 많이 차지하게 된다.
- val array3 = intArrayOf(10, 20, 30, 40, 50)
- 기본 자료형인 int 타입의 배열을 생성하여 요소를 저장한다.
- 래퍼 클래스로 저장하는 arrayOf()보다 메모리를 효율적으로 사용할 수 있다.
Wrapper Class 정리 글
[8일차 Java] Wrapper Class
📖 Wrapper Class란? 기본 자료형 값을 관리하기 위한 목적으로 만든 클래스 Boxing : 기본 자료형 값을 Wrapper 클래스 타입으로 만들어준다. UnBoxing : Wrapper 객체에 담긴 값을 추출하여 기본 자료형 값
wise-99.tistory.com
람다식과 it을 사용한 배열 생성
fun main(){
val array6 = Array(5) {
0
}
println("array6 : ${array6.contentToString()}") // [0, 0, 0, 0, 0]
val array7 = Array(5){
it
}
println("array7 : ${array7.contentToString()}") // [0, 1, 2, 3, 4]
val array8 = Array(10){
(it+1) * 3
}
println("array8 : ${array8.contentToString()}") // [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
}
✔️ 코드 해석
- 람다식 코드를 수행하여 제일 마지막에 작성되어 있는 값을 배열의 요소로 담아준다.
- 특정 식을 통해 계산된 결과나 패턴을 가지는 배열을 만들 때 사용한다.
- array6
- 크기가 5인 배열에 0을 5개 넣어 생성한다.
- array7
- it을 사용하여 배열에 요소를 넣는다.
- it은 0부터 1씩 증가하는 값을 가진다.
- array8
- it을 이용하여 특정 패턴을 가진 배열을 생성한다.
- array8은 3의 배수 10개를 담는다.
for문을 사용한 배열 순회
fun main(){
val array1 = arrayOf(10, 20, 30, 40, 50)
for(item in array1){
println("item : $item")
}
}
다차원 배열 생성
fun main(){
val array9 = arrayOf(
arrayOf(10, 20, 30),
arrayOf(40, 50, 60),
arrayOf(70, 80, 90)
)
println("array9 : $array9") // array9의 ID 값
println("array9 : ${array9.contentToString()}") // array9에 들어있는 1차원 배열의 ID 값들
println("array9 : ${array9.contentDeepToString()}") // [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
for(item in array9){
for(item2 in item){
println("item2 : $item2")
}
}
}
✔️ 코드 해석
- array9 안에 arrayOf()를 사용하여 2차원 배열을 생성한다.
- 길이가 3인 1차원 배열 3개를 넣어 3X3의 2차원 배열이 생성된다.
- contentToString()
- 1차원 배열에서는 배열의 값을 보여주지만 다차원 배열에서는 다차원 배열 안에 있는 1차원 배열들의 ID를 배열로 출력한다.
- contentDeepToString()
- 다차원 배열에서 배열이 가진 요소를 String으로 출력한다.
배열 요소 접근
fun main(){
val array1 = arrayOf(10, 20, 30, 40, 50)
println("array1 0 : ${array1[0]}")
println("array1 1 : ${array1[1]}")
println("array1.get(0) : ${array1.get(0)}")
println("array1.get(1) : ${array1.get(1)}")
}
✔️ 코드 해석
- 0부터 1씩 증가되는 값을 사용한다.
- get 메서드를 통해서 가져올 수도 있다.
- [ ] 연산자를 사용하면 get 메서드를 호출해서 값을 가져오는 것이므로 [ ] 연산자를 사용하는 것과 동일하다.
새로운 값 저장(변경)
fun main(){
println("array1 : ${array1.contentToString()}") // [10, 20, 30, 40, 50]
array1[0] = 100
println("array1 : ${array1.contentToString()}") // [100, 20, 30, 40, 50]
array1.set(1, 200)
println("array1 : ${array1.contentToString()}") // [100, 200, 30, 40, 50]
}
✔️ 코드 해석
- set 메서드를 통해서 가져올 수도 있다.
- [ ] 연산자를 사용하면 set 메서드를 호출해서 값을 변경하는 것이므로 [ ] 연산자를 사용하는 것과 동일하다.
배열 요소 추가
fun main(){
println("array1 : ${array1.contentToString()}")
val array10 = array1.plus(60)
println("array1 : ${array1.contentToString()}")
println("array10 : ${array10.contentToString()}")
}
✔️ 코드 해석
- 새로운 배열이 생성된다.
- plus()를 통해 마지막에 값을 추가한다.
요소 추출
fun main(){
val array11 = array1.sliceArray(1..3)
println("array1 : ${array11.contentToString()}")
}
✔️ 코드 해석
- sliceArray()를 사용하여 배열의 일부를 가져온다.
- 배열에서 지정된 부분의 값을 추출해 새로운 배열로 만들어 반환한다.
- 해당 코드는 순서값 1 ~ 3까지(두 번째 ~ 네 번째)를 추출한다.
배열이 제공하는 메서드
fun main(){
println("첫번째 값 : ${array1.first()}")
println("마지막 값 : ${array1.last()}")
println("30의 위치 : ${array1.indexOf(30)}")
println("평균 : ${array1.average()}")
println("합 : ${array1.sum()}")
println("개수 : ${array1.count()}")
println("개수 : ${array1.size}")
println("30 포함 여부 : ${array1.contains(30)}")
println("1000 포함 여부 : ${array1.contains(1000)}")
println("30 포함 여부 : ${30 in array1}")
println("1000 포함 여부 : ${1000 in array1}")
println("최대 : ${array1.max()}")
println("최소 : ${array1.min()}")
}
정렬
fun main(){
val array12 = arrayOf(5, 1, 3, 7, 10, 8)
val array13 = array12.sortedArray()
val array14 = array12.sortedArrayDescending()
println("array12 : ${array12.contentToString()}") // [5, 1, 3, 7, 10, 8]
println("array13 : ${array13.contentToString()}") // [1, 3, 5, 7, 8, 10]
println("array14 : ${array14.contentToString()}") // [10, 8, 7, 5, 3, 1]
}
✔️ 코드 해석
- sortedArray() : 배열을 오름차순으로 정렬하여 새로운 배열을 생성한다.
- sortedArrayDescending() : 배열을 내림차순으로 정렬하여 새로운 배열을 생성한다.
'Computer > Kotlin' 카테고리의 다른 글
[19일차 Kotlin] List (0) | 2023.05.24 |
---|---|
[19일차 Kotlin] 문자열(String, StringBuffer) (0) | 2023.05.24 |
[18일차 Kotlin] 리플렉션(Reflection) (0) | 2023.05.23 |
[18일차 Kotlin] Infix 함수 (0) | 2023.05.23 |
[Kotlin 18일차] 확장 함수(Extension Function) (0) | 2023.05.23 |