공부
[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()를 쓰면 요소 추가/삭제 가능