배열
-
15강. 코틀린에서 배열과 컬렉션을 다루는 방법BackEnd/Kotlin 2024. 3. 21. 05:00
배열(Array) 컬렉션(Collection) - List, Set, Map 컬렉션의 null 가능성 Java와 함께 사용할 때 주의할 점 배열 배열은 잘 사용하지 않습니다. Effective Java에도 '배열보다 리스트를 사용하라'라고 되어 있습니다. 다음은 배열을 사용한 Java 코드입니다. int[] array = {100, 200}; for (int i = 0; i < array.length; i++) { System.out.printf("%s %s", i, array[i]); } Kotlin으로 구현하면 다음과 같습니다. val array = arrayOf(100, 200) for (i in array.indices) { println("${i} ${array[i]}") } for ((idx,..
-
Item 28. 배열보다는 리스트를 사용하라Book/Effective Java 3E 2022. 11. 12. 09:10
배열과 제네릭 타입의 차이 배열은 공변(convariant)이다. Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다(공변, 즉 함께 변한다는 뜻이다). 반면, 제네릭은 불공변(invariant)이다. 즉, List은 List의 하위 타입도 아니고 상위 타입도 아니다. 배열은 실체화(reify)된다. 배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 확인한다(아래 코드 28-1 런타임 실패). 반면, 제네릭은 타입 정보가 런타임에는 소거(erasure)된다. 원소 타입을 컴파일타임에만 검사한다. 소거는 제네릭이 지원되기 전의 레거시 코드와 제네릭 타입을 함께 사용할 수 있게 해주는 메커니즘이다. // 코드 28-1 런타임에 실패한다. Object[] o..