본문 바로가기
Android/Kotlin

[Android/Kotlin] removeAt: 요소 제거와 반환 동작 이해

by quessr 2025. 1. 17.

 

코틀린의 MutableList는 동적으로 크기가 조정되는 리스트로, 다양한 메서드를 제공하여 데이터를 관리할 수 있습니다.

그중에서도 removeAt 메서드는 특정 인덱스의 요소를 제거하면서 해당 요소를 반환하는 기능을 제공합니다.

이번 글에서는 removeAt의 동작 원리와 사용 예제를 살펴보겠습니다.


1. removeAt 메서드란?

removeAt(index)는 리스트의 특정 인덱스에 있는 요소를 제거하고, 그 제거된 요소를 반환합니다. 이 메서드는 다음 두 가지 작업을 수행합니다:

  1. 리스트에서 요소 제거:
    • 지정된 인덱스의 요소를 삭제합니다.
    • 삭제 후, 리스트의 크기가 1 감소합니다.
  2. 제거된 요소 반환:
    • 삭제된 요소 자체를 반환하여, 호출한 코드에서 해당 값을 사용할 수 있습니다.

2. removeAt의 동작 과정

동작 흐름:

  1. 리스트의 크기(size)가 n일 때, removeAt(index)를 호출하면:
    • 지정된 index의 요소가 삭제됩니다.
    • 이후 요소들이 한 칸씩 앞으로 이동하여 빈자리를 채웁니다.
  2. 삭제된 요소의 값이 반환됩니다.

3. removeAt 예제 코드

기본 예제:

fun main() {
    val stack = mutableListOf(10, 20, 30, 40)

    // 마지막 요소 제거
    val removedElement = stack.removeAt(stack.size - 1)

    println("Removed element: $removedElement") // 출력: Removed element: 40
    println("Updated stack: $stack") // 출력: Updated stack: [10, 20, 30]
}

 

실행 결과:

  1. stack.size - 1은 리스트의 마지막 요소의 인덱스(3)를 의미합니다.
  2. stack.removeAt(3):
    • 인덱스 3의 요소 40을 삭제.
    • 삭제된 요소 40을 반환.
    • 리스트는 [10, 20, 30]으로 변경.

4. 반환값 활용

removeAt은 반환된 요소를 활용할 수 있으므로, 스택 구현에서 유용합니다. 예를 들어, pop 동작을 구현할 때 사용합니다.

val stack = mutableListOf(1, 2, 3)

fun pop(): Int {
    return if (stack.isNotEmpty()) stack.removeAt(stack.size - 1) else -1
}

fun main() {
    println("Popped element: ${pop()}") // 출력: Popped element: 3
    println("Updated stack: $stack") // 출력: Updated stack: [1, 2]
}

동작 설명:

  1. stack.removeAt(stack.size - 1):
    • 리스트의 마지막 요소(3)를 제거.
    • 제거된 요소 3을 반환.
  2. 반환값 3을 pop 함수에서 리턴.
  3. 리스트 상태는 [1, 2]로 변경.

5. removeAt 사용 시 주의사항

  1. 인덱스 범위 확인:
    • index가 리스트의 범위를 벗어나면 IndexOutOfBoundsException이 발생합니다.
    • 항상 리스트가 비어 있지 않은지 확인하거나, index가 0 <= index < list.size인지 검사해야 합니다.
  2. 성능:
    • removeAt은 삭제된 인덱스 이후의 모든 요소를 한 칸씩 앞으로 이동시킵니다.
    • 리스트의 크기가 커질수록 삭제에 드는 시간이 늘어날 수 있습니다(시간 복잡도: O(n).

6. removeAt와 last의 차이점

메서드작동 방식리스트 상태 변경 여부

메서드 작동 방식 리스트 상태 변경 여부
removeAt 지정된 인덱스의 요소를 제거하고 반환 변경됨
last 마지막 요소를 반환 변경되지 않음

 

예제 비교:

val stack = mutableListOf(1, 2, 3)

val lastElement = stack.last()
println("Last element: $lastElement") // 출력: Last element: 3
println("Stack after last(): $stack") // 출력: Stack after last(): [1, 2, 3]

val removedElement = stack.removeAt(stack.size - 1)
println("Removed element: $removedElement") // 출력: Removed element: 3
println("Stack after removeAt(): $stack") // 출력: Stack after removeAt(): [1, 2]

 

7. 결론

  • removeAt 메서드는 특정 인덱스의 요소를 제거하고, 제거된 요소를 반환합니다.
  • 이 메서드는 스택 구현에서 pop 동작을 처리할 때 매우 유용합니다.
  • 사용 시 인덱스 범위를 확인해야 하며, 큰 리스트에서 반복적으로 호출하면 성능 문제가 발생할 수 있습니다.
  • 리스트의 상태를 변경하지 않고 요소를 확인하려면 last()를 사용하면 됩니다.

참고: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-abstract-mutable-list/remove-at.html 

 

removeAt

removeAt JSJVMNativeWasm-JSWasm-WASI Removes an element at the specified index from the list. Since Kotlin1.1Returnthe element that has been removed. Removes an element at the specified index from the list. This method is redeclared as abstract, because it

kotlinlang.org

 

반응형