❓채팅방 대화내용 리스트 UI를 구현하는 중에 listOf와 mutableListOf, Array의 차이를 명확히 몰라서 정리했다.
📌 listOf와 Array의 차이
1. 크기
- Array: 고정 크기를 가집니다. 배열을 생성할 때 크기를 정해야 하며, 이후에는 크기를 변경할 수 없습니다.
- listOf: 고정된크기를 가집니다. 리스트를 생성할 때 요소의 수에 따라 초기화됩니다.
2. 가변성
- Array: 요소를 직접 수정할 수 있습니다. 인덱스를 통해 접근하여 값을 변경할 수 있습니다.
- listOf: 불변 리스트이므로, 생성된 후에는 요소를 추가하거나 삭제할 수 없고, 수정할 수도 없습니다.
3. 데이터 타입
- Array: 동일한 타입의 요소만 저장할 수 있습니다. 예를 들어, Array<Int>는 정수만 저장할 수 있습니다.
- listOf: 다양한 타입의 요소를 저장할 수 있는 List<Any> 형태로 사용할 수 있습니다. 하지만 각 요소는 같은 타입이어야 합니다.
4. 메서드 및 기능
- Array: 기본적인 배열 기능만 제공됩니다.
- listOf: 다양한 메서드와 기능을 제공하여 리스트에 대한 조작이 가능합니다. 하지만 불변 리스트이므로 요소의 추가, 삭제, 수정은 불가능합니다.
fun main() {
// Array 예시
val array = arrayOf(1, 2, 3) // 정수 배열
array[0] = 10 // 수정 가능
println(array.joinToString()) // 출력: 10, 2, 3
// listOf 예시
val list = listOf(1, 2, 3) // 불변 리스트
// list[0] = 10 // 오류 발생: 리스트의 요소 수정 불가
println(list.joinToString()) // 출력: 1, 2, 3
}
📌 listOf와 mutablelistOf 차이
1. 가변성과 불변성
- listOf:불변 리스트를 생성합니다. 즉, 리스트가 생성된 후에는 요소를 추가, 삭제 또는 수정할 수 없습니다.예를 들어, 리스트의 내용을 변경하려고 하면 컴파일 오류가 발생합니다.
- mutableListOf:가변 리스트를 생성합니다. 즉, 생성 후에도 요소를 자유롭게 추가, 삭제 및 수정할 수 있습니다.가변 리스트는 다양한 메서드를 제공하여 리스트를 조작할 수 있습니다.
//listof 사용예시
val immutableList = listOf(1, 2, 3)
// immutableList.add(4) // 오류: 불변 리스트에 요소 추가 불가
// immutableList[0] = 10 // 오류: 불변 리스트의 요소 수정 불가
println(immutableList) // 출력: [1, 2, 3]
//mutableListOf 사용 예시
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4) // 요소 추가 가능
mutableList[0] = 10 // 요소 수정 가능
println(mutableList) // 출력: [10, 2, 3, 4]
2. 성능
- listOf: 리스트가 변경되지 않기 때문에 더 안전하고, 불변의 특성 덕분에 여러 스레드에서 안전하게 사용할 수 있습니다.
- mutableListOf: 요소를 추가하거나 삭제할 수 있어 유연성이 있지만, 그만큼 관리가 필요합니다.