inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 2편

연결리스트 배열 선언?

해결된 질문

390

디와이

작성한 질문수 5

1

해시 알고리즘6-해시 충돌 구현 파트에서

 

LinkedList<Integer>[] buckets = new LinkedList[CAPACITY];

이런 코드가 등장했는데요. 제가 앞선 강의에서 이런 내용을 놓친 것인지는 잘 모르겠지만...ㅠ

제네릭을 통해 선언하는 것인데

new LinkedList<>()[CAPACITY];

를 하면 안되는 이유가 무엇인가요?

java 객체지향 코딩-테스트 알고리즘

답변 1

2

김영한

안녕하세요. 다와이님

자바에서는 제네릭을 사용하여 배열을 직접 생성하는 것이 허용되지 않습니다. 이는 자바의 제네릭 타입 소거(type erasure) 메커니즘과 관련이 있습니다. 제네릭 타입은 컴파일 시점에서만 유효하고 런타임 시점에서는 제거되기 때문에, JVM은 런타임에 제네릭 타입 정보를 알 수 없습니다. 이로 인해 제네릭 타입 배열의 타입 안전성을 보장할 수 없습니다.

 

컴파일러는 배열을 생성할 때 정확한 타입 정보를 알아야 합니다. 그러나 제네릭 타입 정보는 컴파일 시점에만 존재하고, 런타임에는 제거되므로, 제네릭 배열을 생성하면 컴파일러는 타입 안전성을 보장할 수 없습니다. 예를 들어:

LinkedList<Integer>[] array = new LinkedList<Integer>[10];

이 코드는 컴파일되지 않습니다. 왜냐하면 LinkedList<Integer> 배열을 생성하는 동안 컴파일러는 이 배열의 타입 정보를 런타임에 유지할 수 없기 때문입니다. 만약 허용된다면, 다음과 같은 문제가 발생할 수 있습니다

Object[] objArray = new LinkedList<Integer>[10];
objArray[0] = new LinkedList<String>(); // 타입 안전성 위배

// ClassCastException 발생 가능
LinkedList<Integer> list = (LinkedList<Integer>) objArray[0]; 

위 코드는 objArray에 다른 제네릭 타입의 객체를 추가함으로써 타입 안전성을 위배할 수 있고, 잘못된 타입 캐스팅으로 인해 ClassCastException이 발생할 수 있습니다.

이 내용이 이해가 어렵다면 간단히 자바에서는 제네릭을 사용하여 배열을 직접 생성하는 것이 허용되지 않는다고 이해하시면 됩니다 🙂

감사합니다.

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

62

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

176

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

77

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

99

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1