제네릭 타입 소거 (Type Erasure)
·
Java
제네릭은 타입 안정성을 보장하기 위해 JDK 1.5부터 도입됐으며, 이전 자바 버전의 코드와의 호환성을 위해 컴파일 타임에 제네릭 타입은 사라진다.제네릭의 작동 방식public class Node { private T data; private Node next; public Node(T data, Node next) { this.data = data; this.next = next; } public T getData() { return data; } // ...}제네릭 타입인 `Node` 클래스는 컴파일되면 아래 코드로 변환된다. public class Node { private Object data; private Node next; ..
ArrayList는 왜 제네릭 타입 E[]가 아닌 Object[]으로 요소를 관리할까?
·
Java
제네릭을 공부하다가 제네릭을 사용하는 클래스 중 대표적으로 자주 사용되는 ArrayList에 대해 파헤치기 시작했다.그런데 이상한 점을 하나 발견했다.내부 요소들을 관리하는 자료구조가 Object[] 이었던 것이다.ArrayList가 제네릭을 사용하니 E[] 를 사용해도 될 것 같은데, 왜 Object[] 를 사용하고 있을까? ArrayList제네릭을 이용해 구현한 ArrayListprivate static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initial..