섹션 4. 직접 구현하는 연결 리스트 제네릭 도입
제네릭은 new를 하면 타입 이레이저 때문에 Object가 되어버려서 new를 할 수 없다고 하셨는데,
Node<E> newNode = new Node<>(e);
이것도 E부분이 Object로 변하니까 new 생성을 못하는
이거는 왜 가능한 건지 이해가 되지 않습니다 ㅠ
public class MyLinkedListV3<E> {
private Node<E> first;
private int size = 0;
public void add(E e) {
Node<E> newNode = new Node<>(e);
if (first == null) {
first = newNode;
} else {
Node<E> lastNode = getLastNode();
lastNode.next = newNode;
}
size++;
}
답변 1
2
안녕하세요. 권정익님
문제가 되는 부분은 제네릭 타입을 직접적으로 인스턴화 할 때 발생합니다.
예를 들어서 new T()와 같이 작성하면 문제가 됩니다.
Node<E> newNode = new Node<>(e); 이 구문이 가능한 이유는 타입 소거가 Node 클래스의 인스턴스 생성을 방해하지 않기 때문입니다. 실제로 Node 클래스의 생성자는 E 타입의 객체를 받을 수 있습니다. 여기서 중요한 것은 생성자가 제네릭 타입을 직접적으로 인스턴스화하지 않는다는 것입니다. 즉, Node<E> 안에서 E 타입을 생성하려 할 때는 문제가 될 수 있지만, 단순히 E 타입의 참조를 저장하는 것은 문제가 되지 않습니다.
감사합니다.
제네릭 타입 매개변수 제한과 관련한 문의입니다.
0
79
3
강의가 좀 버겁다 느껴질 때 학습방법 문의
1
132
4
제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T
0
60
1
new T()가 안 되는 니유
0
100
1
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
0
98
2
자바 로드맵 선택 질문
0
111
2
실전 자바 중급 - 2편 후 추천 강의
0
176
2
실프로젝트에서 Java25버전 사용
0
119
1
Arrays.sort
0
67
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
54
2
[리뷰] 중급2편까지 겨우 완강 했습니다.
0
112
2
문제와 풀이1 Ex2와 Ex3
0
65
2
노드 삭제시 노드 null값으로 초기화
0
76
2
강의영상에 대한 질문
0
57
1
타입 매개변수 제한
0
59
1
compareTo
0
68
1
직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다
0
98
3
섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨
0
69
2
퀴즈 오류 관련 문의
0
109
1





