0과 1을 공부하다.

[Kotlin] 코틀린 리스트/배열 본문

Study/Kotlin

[Kotlin] 코틀린 리스트/배열

Developer_Jay 2024. 7. 2. 23:11
728x90

리스트(List)

 

  코틀린에서 리스트(List)는 불변 리스트(Immutable List)와 가변 리스트 (Mutable List)가 있다. 가변 리스트와 불변 리스트의 차이점은 불변 리스트는 초기화와 동시에 리스트의 크기 및 요소를 변경할 수 없으나 가변 리스트는 리스트의 크기 또는 요소를 변경할 수 있다.

 

리스트의 null 가능성 표기는 아래와 같다.

  • List<Int?> : 리스트에 null이 들어갈 수 있지만, 리스트는 절대 null 아님
  • List<Int>? : 리스트에는 null이 들어갈 수 없지만, 리스트는 null일 수 있음
  • List<Int?>? : 리스트에 null이 들어갈 수도 있고, 리스트가 null일 수도 있음

 

불변 리스트와 가변 리스트의 예시는 아래와 같다.

  • 불변 리스트 (Immutable List)
fun main() {

    //val items: List<Int> = listOf<Int>(1,2,3,4,5,6,7,8,9)
    val items = listOf(1,2,3,4,5,6,7,8,9) // 타입 지정 생략 가능

    println(items)
}

 

  • 가변 리스트 (Mutable List)
fun main() {
    // val items: MutableList<Int> = mutableListOf<Int>(1, 2, 3, 4, 5) // 타입 지정 생략 가능
    val items = mutableListOf(1,2,3,4,5)// 변경 가능

    items.add(6) // 요소 추가
    items.remove(3) // 요소 제거
    items[0] = 10 // 요소 수정

    println(items)
}

 

 

리스트를 활용하는 예시는 아래와 같다.

 

  • 다양한 데이터 타입
fun main() {
    val items: List<Any>  = mutableListOf("Jay", 20, 4.5, true)
    println(items)
}
 	
 	/*
	 	[Jay, 20, 4.5, true]
 	*/

 

  • 중첩 리스트
fun main() {
    val nestedList: List<List<String>> = mutableListOf(
        listOf("Apple", "Banana"),
        listOf("Cherry", "Date"),
        listOf("Elderberry", "Fig")
    )

    println(nestedList)  // Output: [[Apple, Banana], [Cherry, Date], [Elderberry, Fig]]
}

 

  • 리스트 병합과 분할
fun main() {

    val items1 = mutableListOf(1,2,3,4,5)
    val items2 = mutableListOf(6,7,8,9,10)
    
    // 병합
    val mergedList = items1 + items2
    println("Merged list: $mergedList")
    
    // 분할
    val chunkedList = mergedList.chunked(2) // 2개씩 분할
    println("Chunked list: $chunkedList")
}
    /*
    Merged list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Chunked list: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    */

 

  • 기타
fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    // 필터링
    val evenNumbers = numbers.filter { it % 2 == 0 }
    println("Even numbers: $evenNumbers")

    // 매핑
    val squaredNumbers = numbers.map { it * it }
    println("Squared numbers: $squaredNumbers")

    // 정렬
    val unsortedList = listOf(5, 3, 9, 1, 4)
    val sortedList = unsortedList.sorted()
    println("Sorted list: $sortedList")

    // 리스트 크기
    println("List size: ${numbers.size}")

    // 리스트 포함 여부
    println("List contains 4: ${numbers.contains(4)}")

    // 특정 조건을 만족하는 첫 번째 요소 찾기
    val firstEven = numbers.find { it % 2 == 0 }
    println("First even number: $firstEven")
}

 

참고 사항으로 가변 리스트의 참조를 변경할 필요가 없으면 val로 선언하고, 참조를 변경할 필요가 있으면 var로 선언한다.

 

 

배열(Array)

 

  배열을 실질적으로 잘쓰지 않는다. List과 Array의 차이점은 다양하지만 대표적으로 잘쓰지 않는 이유는 Array는 초기에 크기를 지정한 이후에 확장할 수 없다는 점이 존재한다. 반면에 List는 Mutable List라면 크기를 확장해서 쓸 수 있다.

fun main() {
    val items = arrayOf(1,2,3)

    val arraySize = items.size // 배열의 크기
    println("array size: " + arraySize)

    // array 값 가져오기
    for(i in 0 .. arraySize - 1){
        print("item: " + items.get(i) + "\\t")
        println("index: " + items[i])
    }

    // array 값 세팅하기
    items.set(0,10)
    println("set: " + items.get(0))

    items[0] = 20
    println("index: " + items[0])
}

 

 

컬렉션을 함수형으로 다루는 방법

 

  • filter: 조건을 만족하는 요소만 선택
  • filterIndexed: 인덱스를 사용하여 조건을 만족하는 요소만 선택
  • map: 각 요소를 주어진 변환 함수에 적용하여 새로운 컬렉션을 생성
  • mapIndexed: 인덱스를 사용하여 각 요소를 변환하는 새로운 컬렉션을 생성
  • mapNotNull: 각 요소를 변환하고, 변환 결과가 null이 아닌 요소만 포함하는 새로운 컬렉션을 생성
  • all: 조건을 모두 만족하면 true, 그렇지 않으면 fasle
  • none: 조건을 모두 불만족하면 true, 그렇지 않으면 false
  • any: 조건을 하나라도 만족하면 true, 그렇지 않으면 false
  • count: 개수를 센다
  • sortedBy: (오름차순) 정렬을 한다.
  • sortByDescending: (내림차순) 정렬을 한다.
  • distinctBy : 변형된 값을 기준으로 중복을 제거한다.
  • first: 첫번째 값을 가져온다. (무조건 null이 아니어야함.)
  • firstOrNull: 첫번째 값 또는 null을 가져온다.
  • last: 마지막 값을 가져온다. 무조건 null이 아니어야함.)
  • lastOrNull: 첫번째 값 또는 null을 가져온다.
  • groupBy: 그룹핑
  • associateBy: 단일 객체를 받아 매핑 할 때

 

 

 

 

 

 

※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.

 

 

* CopyRight 2024. Jay Park All rights reserved.

728x90

'Study > Kotlin' 카테고리의 다른 글

[Kotlin] 코틀린 함수  (0) 2024.07.02
[Kotlin] 코틀린 조건문 / 반복문  (0) 2024.07.02
[Kotlin] 코틀린 문자열  (0) 2024.07.02
[Kotlin] 코틀린 Null Safety  (0) 2024.07.02
[Kotlin] 코틀린 자료형 / 변수 / 상수 / 연산자  (0) 2024.07.02
Comments