🔍 자바와 코틀린에서 배열 타입의 상속 관계와 관련된 타입 안전성 문제

자바에서는 상속 관계에 있는 타입의 배열 간 대입이 가능합니다. 따라서 String[]Object[]에 대입하는 것은 컴파일 타임에 허용됩니다. 즉, 다음과 같은 코드는 문제없이 컴파일됩니다:

String[] strings = { "a", "b" }; 
Object[] objects = strings; // OK

그러나 배열은 런타임에 타입 안정성을 검사합니다. 위 예제에서 objects는 겉보기에는 Object[]이지만 실제로는 String[]이므로, 다음과 같은 대입은 **런타임 오류(ArrayStoreException)**를 일으킵니다:

objects[0] = new Object(); // 🚨 런타임 오류 발생

즉, 배열 변수의 대입은 가능하지만, 실제 배열 요소에 다른 타입을 저장할 때 타입 위반이 발생할 수 있다는 점에서 주의가 필요합니다.

이러한 이유로 자바 제네릭에서는 배열보다 컬렉션(List 등)을 사용하는 것이 더 안전하다고 권장됩니다. 컬렉션은 컴파일 시점에 타입 안전성을 검사하여 이러한 런타임 오류를 방지할 수 있기 때문입니다.