Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[19일차 Kotlin] 배열(Arrray) 본문

Computer/Kotlin

[19일차 Kotlin] 배열(Arrray)

Wise-99 2023. 5. 23. 23:21

 

 

출처 : 안드로이드 앱스쿨 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() : 배열을 내림차순으로 정렬하여 새로운 배열을 생성한다.