공부

[Kotlin] 문법 정리 1탄 (Array, List)

박매트 2025. 2. 7. 17:51

1. Array<Int> vs IntArray 차이

📌 Array<Int>

  • Array는 객체 배열이라 각 요소가 참조형(Reference Type)
  • null을 저장 가능
  • 생성할 때 arrayOf() 또는 Array(size) { initializer } 사용
 
val arr1: Array<Int> = arrayOf(1, 2, 3) // Array<Int>
val arr2 = Array(5) { it * 2 } // [0, 2, 4, 6, 8]
val arr3: Array<Int?> = arrayOf(1, 2, null, 4) // null 가능

 


📌 IntArray

  • IntArray는 기본형(int) 배열이라 메모리 효율이 좋음
  • null을 저장할 수 없음
  • intArrayOf() 또는 IntArray(size) { initializer } 사용
val intArr1: IntArray = intArrayOf(1, 2, 3) // IntArray
val intArr2 = IntArray(5) { it * 2 } // [0, 2, 4, 6, 8]
// val intArr3: IntArray = intArrayOf(1, 2, null, 4) // 오류! null 불가
 

🔹 차이점 정리

  Array<Int> IntArray
타입 객체 배열 (Integer[]) 기본형 배열 (int[])
저장 방식 요소가 Int 객체로 저장 요소가 메모리 절약된 int 값
null 허용 ✅ 가능 ❌ 불가능
변환 방법 intArray.toTypedArray() array.toIntArray()

 

👉 일반적인 경우 IntArray가 성능 면에서 더 유리
👉 null을 포함하거나 Array<T>와 함께 쓸 땐 Array<Int> 사용

 

2. listOf() vs mutableListOf() 차이

📌 listOf()

  • 읽기 전용 (Immutable) 리스트
  • 추가/수정/삭제 불가능
  • List<T> 타입 반환
val list = listOf(1, 2, 3)
// list.add(4) // 오류! 변경 불가
// list[0] = 10 // 오류! 변경 불가

 

📌 mutableListOf()

  • 변경 가능한 리스트 (Mutable)
  • 요소 추가, 삭제, 수정 가능
  • MutableList<T> 타입 반환
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4) // ✅ 가능
mutableList[0] = 10 // ✅ 가능
println(mutableList) // [10, 2, 3, 4]

 

 

🔹 차이점 정리

  listOf() mutableListOf()
변경 가능 여부 ❌ 불가능 (Immutable) ✅ 가능 (Mutable)
추가/삭제 ❌ 불가능 ✅ 가능
반환 타입 List<T> MutableList<T>

 

최종 정리

  • 배열
    • Array<Int> → 참조형(Int 객체), null 가능, 메모리 덜 효율적
    • IntArray → 기본형(int 값), null 불가, 메모리 효율적
  • 리스트
    • listOf() → 불변 리스트 (읽기 전용)
    • mutableListOf() → 가변 리스트 (추가/삭제/수정 가능)

👉 성능이 중요한 경우 IntArray와 listOf() 사용
👉 변경해야 할 경우 mutableListOf() 사용

 

변환 방법

val immutableList = listOf(1, 2, 3) // 불변 리스트
val mutableList = immutableList.toMutableList() // 변경 가능한 리스트로 변환

mutableList.add(4) // ✅ 추가 가능
mutableList[0] = 10 // ✅ 수정 가능

println(mutableList) // [10, 2, 3, 4]

 

혹시 MutableList를 다시 List로 바꾸려면?

val mutableList = mutableListOf(1, 2, 3)
val immutableList = mutableList.toList() // 다시 불변 리스트로 변환

 

Array → List 변환 방법 : toList(), toMutableList()

val array = arrayOf(1, 2, 3)

// toList() 사용 (불변 리스트)
val list: List<Int> = array.toList()

// toMutableList() 사용 (가변 리스트)
val mutableList: MutableList<Int> = array.toMutableList()

 

IntArray → List 변환 (intArrayOf 사용 시) 

val intArray = intArrayOf(1, 2, 3)

// toList() 사용 (불변 리스트)
val list: List<Int> = intArray.toList()

// toMutableList() 사용 (가변 리스트)
val mutableList: MutableList<Int> = intArray.toMutableList()

 

🔹 정리

변환 대상 불변 리스트 (List) 가변 리스트 (MutableList)
Array<T> → List<T> array.toList() array.toMutableList()
IntArray → List<Int> intArray.toList() intArray.toMutableList()

 

👉 array.toList()는 원본 배열을 변경해도 리스트에는 영향을 주지 않음
👉 toMutableList()를 쓰면 요소 추가/삭제 가능