
Kotlin과 Java의 배열은 구조적으로는 유사하지만, 문법적으로 배열을 순회하는 방식에서 아래와 같이 큰 차이가 존재합니다

Kotlin에서는 Collection을 생성할 때 아래와 같이 불변인지, 가변인지를 명확히 결정해야 합니다.

반면, Java는 기본적으로 ArrayList, HashMap 등 가변 Collection을 사용합니다. 불변 Collection을 만들려면 명시적으로 Collections.unmodifiableList() 또는 List.of() 등의 메서드를 사용해야 합니다.

Java와 달리 Kotlin에서는 List, Set, Map 등의 Collection에 대한 기본 구현체가 존재하며, 아래와 같습니다.


Kotlin에서는 아래와 같이 List를 을 사용할 수 있습니다.

Kotlin에서는 아래와 같이 Set을 사용할 수 있습니다.

Kotlin에서는 아래와 같이 Map을 사용할 수 있습니다.

? 위치에 따라 아래와 같이 Null 가능성을 구분할 수 있습니다.

Java에서 Kotlin의 Collection을 사용할 경우 아래와 같은 2가지 경우를 조심해야 합니다.
Java는 Collection에 대한 가변(읽기 전용)과 불변(변경 가능)을 구분하지 않음
Immutable Collection에 대한 수정 작업을 수행할 수 있고, 이로 인해 Kotlin에서 오동작 발생 가능Java는 nullable과 non-nullable 타입을 구분하지 않음
non-nullable Collection에 null을 리스트에 추가할 수 있고, 이로 인해 Kotlin에서 오동작 발생 가능이러한 문제를 예방하기 위해, Kotlin에 정의한 Collection이 Java에서 호출될 수 있다면 작업 이후 방어 로직을 작성하여 처리하거나 Java에도 존재하는 Collections.unmodifableXXX()를 활용하여 변경이 불가능하도록 해야합니다.
Kotlin에서 Java의 Collection을 사용할 경우 플랫폼 타입을 조심해야 합니다.
플랫폼 타입이란?
플랫폼 타입은 다른 프로그래밍 언어에서 잔달되어 nullable 여부를 알 수없는 타입을 말합니다.
Kotlin에서는 Java에서 가져온 Collection이 List<Int?>, List<Int?>?, List<Int>? 인지 알 수 없습니다. 이 경우는 Java 코드를 보며 맥락을 확인하고, 가져오는 지점을 wrapping해서 영향 범위를 최소화해야 합니다.