- 배열
- Collection - List, Set, Map
- 컬렉션의 null 가능성, Java와 함께 사용하기
| - 배열의 사용법이 자바와 약간 다르다 - 코틀린에서는 불변/가변 컬렉션을 지정해야한다 - List, Set, Map에 대한 사용법이 변경 및 확장 되었다 - Java <-> Kotlin 간 컬렉션을 교환할 때는 플랫폼 타입과 nullable 옵션 간 언어간 유무 차이점을 신경써야 한다. |
1 . 배열
- 코틀린은 컬렉션이든 배열이든 val, var로 시작한다.
fun main() {
var array = arrayOf(100, 200)
for (i in array.indices) {
println(array[i])
}
array = array.plus(300) // 값을 쉽게 넣을 수 있다.
for ((idx, value) in array.withIndex()) {
println("$idx $value")
}
}
1) indices : array.indices의 범위 : idx 0부터 마지막까지를 가르킨다.
2) array.plus(element) : element +
3) withIndex() : 인덱스와 값을 한 번에 가져올 수 있다.
2 . Collection - List, Set, Map
- 코틀린에서는 불변 컬렉션인지 가변 컬렉션인지 지정해줘야한다.

1) Mutable 컬렉션 vs 불변 컬렉션
- 가변컬렉션은 컬렉션에 element를 추가, 삭제할 수 있다
- 불변컬렉션은 컬렉션에 element를 추가, 삭제할 수 없다.
→ Collections.unmodifiableList / Map() 등을 붙여 불변컬렉션 셋팅
다만, 불변 컬렉션이더라도 Reference 타입인 Element의 필드는 바꿀 수 있다.
인덱스 자체를 빼거나, 삭제는 할 수 없지만, 이미 있는 인덱스의 element는 바꿀 수 있다.
□ List : 기타 사용법은 자바와 똑같다
1) 리스트 생성
fun main() {
val numbers = listOf(100, 200) // 불변리스트 생성
val mutableList = mutableListOf(100, 200) // 가변 리스트 생성
var emptyList = emptyList<Int>() // 빈 리스트 생성
printNum(emptyList())
}
private fun printNum(numbers: List<Int>) {}
비어있는 리스트는 타입을 명시해야한다. (타입 추론 가능 시 생략 가능)
2) 인덱스의 값 가져오기
package fp
fun main() {
val numbers = listOf(100, 200) // 불변리스트 생성
println(numbers.get(0)) // 100
println(numbers[0]) // 100
for(num in numbers) {
print("$num ") // 100 200
}
for ((idx, value) in numbers.withIndex()) {
println("$idx $value ") // 0 100, 1 200
}
}
▶ tip . 우선 불변 리스트를 만들고, 필요할 경우에만 가변 리스트로 바꾸
□ Set : 자료 구조적인 차이를 제외하면 List와 동일하다
1) 리스트 생성
- 가변 set : mutableSetOf()
- 불변 set : setOf()
- 기본 구현체는 LinkedHashSet
□ Map
1) 리스트 생성과 순회
fun main() {
val oldMap = mutableMapOf<Int, String>()
oldMap[1] = "Mon"
oldMap[2] = "Tue"
oldMap.put(3, "Fri")
for(m in oldMap) {
print("${m.key} -> ${m.value} ")
}
println()
val oldMap2 = mapOf(1 to "Mon", 2 to "Thu", 3 to "Fri", 4 to "Sat")
.forEach { (key, value) ->
print("$key -> $value ")
}
}
① 값 대입
- map[key] = value || map.put() 으로 key, value를 설정할 수 있고
- 객체를 생성할때 mapOf (key to value, ...)로도 생성이 가능하다 (불변map)
② 값 순회
- 위 List에서 사용한 방식을 사용해도 되고 (for in)
- .forEach{ (key, value) -> } 을 이용해 람다식으로 활용할 수도 있다.
- 키만 가져오기 (map.enrySet())
for(key in oldMap.keys) {
print("$key -> ${oldMap[key]} ")
}
for((key, value) in oldMap.entries) {
print("$key -> $value ")
}
3 . 컬렉션의 null 가능성, Java와 함께 사용하기
□ 물음표의 위치에 따라서 Null 가능성이 바뀐다.| List<Int?> | 리스트에는 null이 들어갈 수 있지만, 리스트는 null이 절대 아님 |
| List<Int>? | 리스트에는 null이 들어갈 수 없지만, 리스트는 null일 수 있음 |
| List<Int?>? | 리스트에는 null이 들어갈 수 있고, 리스트는 null일 수 있음 |
□ Kotlin 쪽의 컬렉션이 Java에서 호출되면 컬렉션 내용이 변할 수 있음을 감안해야한다.
① 자바는 읽기 전용 컬렉션과 변경 가능 컬렉션을 구분하지 않지만,
코틀린에선 불변/가변을 구분한다
▶ 이에 자바에서 불변리스트에 element를 추가할 수 있다 이를 코틀린에서 가져올 가능
② 자바에서는 nullable 타입과 non-nullable을 구분하지 않지만, 코틀린에선 구분한다.
▶ 이에 자바에서 non-nullable 컬렉션에 null을 추가하고 코틀린으로 돌려줄 가능성.
§ 방어 코드를 짜거나 Collections.unmodifableXXX()를 활용하면 자바 쪽에서의 변경 자체를 막을 수도 있다.
③ 반대로 자바의 컬렉션을 코틀린에서 가져올 때, 플랫폼타입은 자바에서 구분하지 않기 때문에, 코드 맥락을 확인하고 Java 코드를 가져오는 지점을 wrapping 해야한다.
※ (intellij) 코틀린 코드 자바로 변환
tool > Kotlin > Show Kotlin Bytecode
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)| 최태현 - 인프런 강의
현재 평점 5.0점 수강생 3,553명인 강의를 만나보세요. 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다. Ko
www.inflearn.com
https://kotlinlang.org/docs/collections-overview.html#collection-types
Collections overview | Kotlin
kotlinlang.org
'Kotlin > Java to Kotlin Guide' 카테고리의 다른 글
| FP - 람다 (0) | 2025.10.09 |
|---|---|
| FP - 다양한 함수 (0) | 2025.10.09 |
| 코틀린에서의 OOP - 6. 다양한 클래스를 다루는 방법 (0) | 2025.10.07 |
| 코틀린에서의 OOP - 5. 중첩 클래스 (0) | 2025.10.07 |
| 코틀린에서의 OOP - 4. object (0) | 2025.10.07 |