
GoodPoint
BadPoint
What I learned and What were reviewed
Generic 은 불공변 을 유지한다.
Object[] objectArray = new Long[1];
objectArray[0] = "타입이 달라 넣을 수 없다.";
위와같은 코드에서 컴파일 에러가 발생하지 않는다. 위 코드가 실제로 실행되는 환경 Runtime 에 되서야 확인할 수 있는것이다.
List<Object> ol = new ArrayList<Long>(); // 호환되지 않는 타입이다.
Long 은 Object 의 하위타입이지만
List<Long> 은 List<Object> 의 하위타입이 아니다.
이와 같이 런타입 환경에서 타입 안정성을 보장할 수 있는 Collection List 의 사용이 권장된다.
Generic Type Erasure 에 대해 따로 학습해보도록 하자.
기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값에 더해 식별성(identity)이란 속성을 갖는다.
기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 유효하지 않은 값, 즉 null을 가질 수 있다.
기본 타입이 박싱된 타입 보다 시간과 메모리 사용면에서 더 효율적이다.