📚 배열


📔 배열 클래스의 멤버 확인

fun Any.dir(): Set<String> {
    val a = this.javaClass.kotlin
    println(a.simpleName)
    var ll = mutableListOf<String>()
    for (i in a.members) {
        ll.add(i.name)
    }
    return ll.toSet()
}

val arInt = arrayOf(1, 2, 3, 4)
println(arInt.dir())
Array
[size, clone, get, iterator, set, equals, hashCode, toString]


📔 배열 생성과 주요 메서드 처리

  • 주요 속성과 메서드
    • 속성 size: 배열의 크기, 즉 원소 개수를 확인하는 속성
    • 메서드 sum: 배열 원소의 합
    • 메서드 average: 배열 원소의 평균
    • 메서드 count: 배열 원소의 개수를 조회
    • 메서드 maxOrNull: 최댓값 조회
    • 메서드 minOrNull: 최솟값 조회
    • 메서드 contentToString: 배열을 출력
import java.util.Arrays // 자바의 배열 클래스

val arInt = arrayOf(1, 2, 3, 4)
val arStr = arrayOf("코틀린", "자바")

println(arInt)
println(arInt.contentToString() + " " + arInt.javaClass.kotlin)
println(Arrays.toString(arStr) + " " + arStr.javaClass.kotlin)

println("배열의 크기 = " + arInt.size)
println("배열 원소의 합 = " + arInt.sum())
println("배열 원소의 최댓값 = " + arInt.maxOrNull())
println("배열 원소의 최솟값 = " + arInt.minOrNull())
println("배열 원소의 평균 = " + arInt.average())
println("배열 원소의 개수 = " + arInt.count())

println("배열의 크기 = " + arStr.size)
println("배열 원소의 최댓값 = " + arStr.maxOrNull())
println("배열 원소의 최솟값 = " + arStr.minOrNull())
println("배열 원소의 개수 = " + arStr.count())

[Ljava.lang.Integer;@79479907
[1, 2, 3, 4] class kotlin.Array
[코틀린, 자바] class kotlin.Array
배열의 크기 = 4
배열 원소의 합 = 10
배열 원소의 최댓값 = 4
배열 원소의 최솟값 = 1
배열 원소의 평균 = 2.5
배열 원소의 개수 = 4
배열의 크기 = 2
배열 원소의 최댓값 = 코틀린
배열 원소의 최솟값 = 자바
배열 원소의 개수 = 2


📔 배열의 원소 출력

  • 주요 메서드
    • 메서드 hasNext: 반복문 내에서 배열 조회 시, 원소의 존재 확인
    • 메서드 next: 원소를 하나씩 조회
val arInt = arrayOf(1, 2, 3, 4)
val arStr = arrayOf("코틀린", "자바")


for (i in arInt) {
    println(i.toString() + ", ")
}
println()

val x = arStr.indices.iterator()
while(x.hasNext()) {
    println(arStr.get(x.next()))
}

arStr.forEach { println(it) }
arStr.forEachIndexed { i, e ->
    println("arr[$i] -> $e")
}
1, 
2, 
3, 
4, 

코틀린
자바
코틀린
자바
arr[0] -> 코틀린
arr[1] -> 자바


📔 배열 원소의 검색과 계산

val car = charArrayOf('a', 'b', 'c')

println(car[0]) // 첫번째 원소 조회
println(car.get(0)) // 첫번째 원소 조회
println(car.getOrElse(0, { ' ' })) // 해당 인덱스에 값이 없으면, 람다 함수 내 지정된 값 처리

val car1 = car.copyOf() // 다른 배열로 복사
car1[1] = 'z' // 연산자를 활용해 배열값 갱신
car1.set(2, 'x') // 메서드를 통해 배열값 갱신

println(car.contentToString()) // 기존 배열
println(car1.contentToString()) // 변경된 배열
a
a
a
[a, b, c]
[a, z, x]


📔 배열 추가, 부분 배열, 기타 조회와 포함 여부

  • 배열의 원소를 추가할 경우, + 연산자 또는 plus 메서드 사용
  • 부분 배열을 뽑아낼 때는 sliceArray 메서드 사용
  • 문자열과 동일하게 배열의 첫 원소와 마지막 원소는 first, last 메서드 사용
  • 특정 원소의 값으로 현재 인덱스를 확인할 경우, indexOf 메서드 사용
  • 포함 관계는 in 연산자 또는 contains 메서드 사용
val car = charArrayOf('a', 'b', 'c')
val car1 = car.plus('d') // 원소 추가
val car2 = car + 'd' // 연산자로 원소 추가
println(car1.contentToString())
println(car2.contentToString())

val car3 = car1.sliceArray(0..1) // 부분 배열 생성
println(car3.contentToString())

println(car1.first()) // 첫 번째 원소
println(car1.last()) // 마지막 원소
println(car1.indexOf('c')) // 원소의 인덱스 번호
println(car1.contains('c')) // 포함 여부 확인
println('d' in car1) // 포함 여부 연산자를 통해 확인
[a, b, c, d]
[a, b, c, d]
[a, b]
a
d
2
true
true


📔 배열의 정렬과 역정렬

  • sort() / index(): 배열을 정렬하여 내부 원소의 위치를 바꿀 때 사용
  • sorted() / reversed() / sortedDescending(): 배열의 원소를 정렬하면서 새로운 배열을 만들 때 사용
val arr1 = arrayOf(3, 4, 2, 6, 7, 1) // 배열 객체 생성
val arr2 = arr1.copyOf() // 배열 복사

arr1.sort() // 배열 정렬
println(arr1.contentToString())
arr1.reverse() // 배열 역정렬
println(arr1.contentToString())

val arr3 = arr2.sorted() // 새로운 배열 생성 및 정렬
println(arr3)
val arr4 = arr2.sortedDescending()
println(arr4)
val arr5 = arr2.reversed()
println(arr5)
println(arr5.javaClass)
[1, 2, 3, 4, 6, 7]
[7, 6, 4, 3, 2, 1]
[1, 2, 3, 4, 6, 7]
[7, 6, 4, 3, 2, 1]
[1, 7, 6, 2, 4, 3]
class java.util.ArrayList


📔 배열 클래스로 배열 객체 생성

val arr = Array(5) { it * it } // 클래스로 배열 생성
println(arr.contentToString())

val arrInt = IntArray(5) { it * 5 } // 특정 자료형에 맞게 배열 생성 
println(arrInt.contentToString())

val arrDouble = DoubleArray(5) { it * 5.0 }
println(arrDouble.contentToString())

val arrNull = arrayOfNulls<Int>(5) // 널 값을 갖는 배열 생성 
println(arrNull.contentToString())
[0, 1, 4, 9, 16]
[0, 5, 10, 15, 20]
[0.0, 5.0, 10.0, 15.0, 20.0]
[null, null, null, null, null]