with ChatGPT/코틀린 with ChatGPT
[코틀린 with ChatGPT #6] 코틀린의 리스트(List)와 배열(Array)의 차이점은 무엇이며, 각각 언제 사용하는 것이 좋은가?
dev_writer
2025. 3. 20. 09:00
with ChatGPT 시리즈는 ChatGPT의 내용과 개인의 생각을 토대로 학습해 보는 컨텐츠입니다.
Kotlin에서 여러 데이터를 저장하는 기본적인 타입은 List와 Array입니다.
둘 다 여러 개의 값을 저장할 수 있지만, 구조와 사용 목적이 다릅니다.
이번 주제에서는 List와 Array의 차이점을 살펴보고, 어떤 상황에서 List를 선택하는 것이 좋은지 알아보겠습니다.
1. List와 Array의 주요 차이점
특징 | List<T> | Array<T> |
크기 변경 가능 여부 | ✅ MutableList로 변경 가능 | ❌ 크기 고정 |
메모리 구조 | 컬렉션 객체 (동적 할당) | 연속된 메모리 블록 (고정 크기) |
함수형 스타일 지원 | ✅ map, filter 등 활용 가능 | ❌ 제한적 |
직렬화(JSON 변환 등) | ✅ Jackson, Gson과 잘 호환됨 | ⚠️ 직접 변환 필요 |
성능 최적화 | ❌ 일부 오버헤드 존재 | ✅ 원시 배열에 가까워 빠름 |
2. List와 Array의 기본 사용법
✅ 1️⃣ List 사용 예제
val numbers: List<Int> = listOf(1, 2, 3, 4, 5)
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3)
// 요소 추가 (mutableList만 가능)
mutableNumbers.add(6) // ✅ 가능
numbers[0] = 10 // ❌ 오류 (불변 리스트)
- List는 기본적으로 불변 (val 사용 시 변경 불가)
- MutableList를 사용하면 요소 추가/삭제 가능
✅ 2️⃣ Array 사용 예제
val numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)
// 배열 값 변경 가능
numbers[0] = 10 // ✅ 가능
numbers += 6 // ❌ 크기 변경 불가 (새 배열 생성 필요)
- Array는 고정 크기 배열이며, 값 변경은 가능하지만 크기 변경은 불가능
🚀 3. 언제 List와 Array를 사용해야 할까?
상황 | List 선택 이유 | Array 선택 이유 |
데이터 변경이 필요한 경우 | ✅ MutableList로 변경 가능 | ❌ 크기 변경 불가 |
JSON 직렬화 / API 응답 처리 | ✅ 더 안정적인 변환 | ⚠️ 변환 과정에서 문제 발생 가능 |
대량의 데이터 처리 (성능 중요) | ❌ 오버헤드 존재 | ✅ 원시 배열이라 빠름 |
함수형 프로그래밍 (map, filter 등) | ✅ 더 다양한 메서드 지원 | ⚠️ Array는 함수형 지원이 제한적 |
결론:
- 일반적인 비즈니스 로직이나 API 응답을 처리할 때는 List가 더 적합
- 성능이 중요한 경우(예: 대량의 숫자 데이터 처리)에는 Array가 유리
🤔 추가로 생각해 볼 질문들
- Kotlin에서 List를 Array로 변환하는 방법은 무엇일까? (toTypedArray() vs toList())
- Array<T> 대신 IntArray, FloatArray 같은 원시 배열을 사용하면 어떤 장점이 있을까?
- JSON 직렬화 외에도 List가 Array보다 더 적절한 상황은 언제일까?
- Kotlin의 Array는 왜 크기 변경이 불가능할까? (Java의 ArrayList와 비교해 보기)
- List와 Array의 성능 차이가 실제로 얼마나 나는지 측정해 볼 수 있을까?