티스토리 툴바


블로그 이미지
카라크라스

Leon.Kim의 공부하는 블로그입니다. mail - kalaklas@gmail.com twitter - @kalaklas

Rss feed Tistory
Java/Effectice Java 2010/01/12 01:06

h23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자.

h23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자.

reference : Effective Java second edition



>>들어가기
이전에 제너릭타입이 등장하기 전에
List stamps = new List();
stamps.add(new Stamp());
처럼 타입 매개 변수를 주지 않고 컬렉션 타입이나 다른 제네릭 타입을 사용했다. (현재도 여전히 사용 가능하다)
그렇다고 해서 원천타입을 사용하지 말자.

stamps컬렉션에 항상 Stamp의 인스턴스가 추가된다는 보장이 없다. (억지라 생각할 수 있지만 실제 그런 상황이 많이 발생한다.)

stamps.add( new Post()); 이렇게 해도 stamps컬렉션에 Post객체는 이상없이 추가된다.

for(int i = 0; i < stamps.size();i++){
Stamp s = stamps.get(i);
.
.
.
Post 객체를 꺼내는 순간 에러가 발생한다.  CalssCastException 
"에러는 가능한 빨리 즉, 컴파일 시점에 발견되어야 가장 좋은데, 이런 경우 런타임에 에러가 발생하게 된다."

지금까지 쟤네들이 되는 이유는 호환성 때문이기 때문이다. 절대 비추다.(이주호환성때문에 아직 지원하는 것이다.)

List<Stamp> stamps = new List<Stamp>();
와 같이 컬렉션을 선언하면 Stamp객체만 저장될 컬렉션을 명시적으로 선언하게 되는 것이므로,
여러모로 안정성을 보장한다. (캐스팅도 필요없고 . . . 컴파일타임에 에러를 효과적으로 파악할수 있는등 . .)

List<Object> 어떤 타입의 객체도 포함할 수 있는 List를 말한다.
List<?> 언바운드 와일드 카드 타입으로 일부 미 지정 타입의 객체만 포함할 수 있는 List다.


* 원천타입을 사용하면 런타입시 예외가 생길 수 잇으므로 앞으로는 사용하지 말자

>>활용
TOTAL 19,751 TODAY 3