[코틀린, kotlin / 기초문법] 배열 다루는법, 관련함수

1. 배열 생성하기


arrayOf() 함수를 사용하여 배열을 생성할 수 있다. 예를 들어, val numbers = arrayOf(1, 2, 3, 4, 5)는 numbers라는 이름의 정수 배열을 생성한다.
배열의 요소 타입을 명시하기 위해 제네릭을 사용할 수도 있다. 예를 들어, val strings = arrayOf <String>("Hello", "World")는 문자열 배열 strings를 생성한다

2. 배열 접근하기


배열의 특정 위치에 있는 요소에 접근하려면, 배열 이름 뒤에 인덱스를 사용하여 해당 요소에 접근할 수 있다. 인덱스는 0부터 시작한다. 예를 들어, val firstNumber = numbers[0]는 numbers 배열의 첫 번째 요소를 firstNumber 변수에 할당한다.
만약 유효하지 않은 인덱스에 접근하려고 하면 ArrayIndexOutOfBoundsException 예외가 발생 할 수 있다.

3. 배열 크기


배열의 크기(요소 수)를 알고 싶을 때는 size 속성을 사용한다. 예를 들어, val size = numbers.size 는 numbers 배열의 크기를 size 변수에 할당한다.

4. 배열 수정하기


배열의 요소를 변경하려면, 해당 요소의 인덱스를 사용하여 접근하고 새 값을 할당한다. 예를 들어, numbers[2] = 10은 numbers 배열의 세 번째 요소를 10으로 변경한다. 배열은 가변(mutable)이므로 요소가 수정가능하다.
(배열은 크기가 고정되어 있으며, 이미 생성된 배열의 크기를 변경하는 것은 불가능하지만 배열의 요소를 직접 접근하여 수정하는 것은 가능하다)

5. 반복문으로 배열 요소에 접근하기


for 루프를 사용하여 배열의 모든 요소에 접근할 수 있다. 예를 들어, 다음 코드는 numbers 배열의 모든 요소를 출력한다.
for (number in numbers) {
    println(number)
}

6. 최소, 최대값 구하기


(1) min() : min() 함수를 사용하여 컬렉션(리스트, 배열 등)의 최솟값을 찾을 수 있다.
fun main() {
    val numbers = listOf(1, 3, 7, 2, 9, 5)

    // 리스트의 최솟값을 찾아서 출력
    val minNumber = numbers.min()
    println("최솟값: $minNumber")
}
(2) max() : max() 함수를 사용하여 컬렉션(리스트, 배열 등)의 최댓값을 찾을 수 있다.
fun main() {
    val numbers = listOf(1, 3, 7, 2, 9, 5)

    // 리스트의 최댓값을 찾아서 출력
    val maxNumber = numbers.max()
    println("최댓값: $maxNumber")
}

7. 컬렉션(배열, 리스트, 집합) 관련 함수


코틀린은 배열을 다루기 위해 다양한 함수와 기능을 제공한다. 아래 내용은 대표적인 함수의 예이다.
(1) sort() : 배열을 정렬한다. 예를 들어, numbers.sort()는 numbers 배열을 오름차순으로 정렬한다.(sort()는 원본 리스트를 정렬하여 변경)
(2) sorted() : sorted()는 리스트를 정렬한 뒤 새로운 리스트를 반환한다.(원본 리스트를 변경하지 않고, 정렬된 결과를 새로운 리스트로 생성하여 반환)
(3) sortDescending() : 원본 컬렉션을 직접 변경하여 내림차순으로 정렬한다.
(4) sortedDescending() : sortedDescending()는 리스트를 내림차순으로 정렬한 뒤 새로운 리스트를 반환한다.(원본 리스트를 변경하지 않고, 정렬된 결과를 새로운 리스트로 생성하여 반환)
(5) sum() : 배열의 모든 요소의 합을 계산한다. 예를 들어, val total = numbers.sum()은 numbers 배열의 모든 요소의 합을 total 변수에 할당한다. 
(6) contains() : 배열에 주어진 요소가 포함되어 있는지 여부를 반환한다. 
(7) reversed() : 컬렉션 또는 문자열을 역순으로 뒤집는 메소드이다.
- 배열에서의 사용
val numbers = arrayOf(1, 2, 3, 4, 5)
val reversedNumbers = numbers.reversed()
- 문자열에서의 사용
val str: String = "Hello, World!"
val reversedString = str.reversed()
(8) joinToString() : 컬렉션의 요소들을 하나의 문자열로 결합한다.
val array = arrayOf("apple", "banana", "orange")
val result = array.joinToString()
println(result) //출력: "apple, banana, orange"
separator, prefix, postfix와 같은 매개변수가 존재한다.
- separator : 요소들 사이에 삽입되는 구분자를 지정한다. 기본값은 ", " 
- prefix : 결과 문자열의 접두사를 지정한다. 기본값은 빈 문자열("") 
- postfix : 결과 문자열의 접미사를 지정한다. 기본값은 빈 문자열("")
val array = arrayOf("apple", "banana", "orange")
val result = array.joinToString(separator = "-", prefix = "[", postfix = "]")
println(result) // 출력: "apple-banana-orange"
(9) toSet() : 다양한 컬렉션 타입에 사용 할 수 있으며, 해당 컬렉션의 요소 중 중복된 것을 제외하고 반환한다.
val list = listOf(1, 2, 3, 3, 4, 5, 5)
val set = list.toSet()

println(set) // 출력: [1, 2, 3, 4, 5]
(10) count{} : 배열 내 요소들의 개수를 세는 데에 count() 함수를 활용할 수 있다.
val numbers = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenCount = numbers.count { it % 2 == 0 }
val greaterThanFive = numbers.count { it > 5 }

println("Even numbers count: $evenCount") // 출력: Even numbers count: 5
println("Numbers greater than 5 count: $greaterThanFive") // 출력: Numbers greater than 5 count: 5
위 예시에서 count{} 함수를 사용하여 numbers 배열에서 짝수와 5보다 큰 숫자들의 개수를 각각 evenCount와 greaterThanFive 변수에 저장한 것을 볼 수 있다.

(11) chunked() : 컬렉션을 작은 청크(chunk)로 나누는 것이며, 원본 컬렉션의 타입과 무관하게 동작한다.
val array: Array<Int> = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val list: MutableList<String> = mutableListOf("apple", "banana", "orange", "grape")

val chunkedArray: List<List<Int>> = array.chunked(3)
val chunkedList: List<List<String>> = list.chunked(2)

println(chunkedArray) // [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
println(chunkedList)  // [[apple, banana], [orange, grape]]
위 코드에서 chunked() 함수는 array와 list를 각각 크기 3과 2로 청크로 나누어 새로운 리스트를 반환한다. 결과적으로 chunkedArray와 chunkedList에 각각 나눠진 청크가 저장되게 된다.

(12) filter{} : 컬렉션에서 요소를 걸러내는 데 사용되는 함수이다. 주어진 조건에 맞는 요소만을 유지하고, 조건에 맞지 않는 요소들은 걸러낸다. filter 함수는 원본 컬렉션을 변경하지 않고 새로운 컬렉션을 반환한다.
val numbers = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // Output: [2, 4, 6, 8, 10]
위 코드는 filter 함수를 사용하여 짝수만을 걸러내게 된다.

(13) find{} : 컬렉션에서 특정 조건을 만족하는 첫 번째 요소를 찾는 함수이다.
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumber = numbers.find { it % 2 == 0 }
println(evenNumber) // 출력 결과: 2
위 예시에서 find 함수를 사용하여 람다식 { it % 2 == 0 }을 전달하면서 짝수를 찾는 조건을 나타낸다. 그리고 find 함수는 numbers 리스트에서 첫 번째로 조건을 만족하는 요소인 2를 반환하게 된다.