kok202
[2019.03.17] 이팩티브 자바 3판 (5장 : 제네릭 사용시 - )

2019. 3. 17. 02:45[공부] 독서/이펙티브 자바 3판

제네릭에 지정된 타입은 실체화 불가한 타입이라는 것을 명심하자.

+ 알아서 형변환 코드를 추가할 수 있다.

- 코드가 지저분해진다.

 

 

 

Raw 타입과 제네릭

제네릭 클래스를 사용할 때 raw type 제네릭은 절대 쓰지마라

public class MyGeneric<T>{
    // ...
}


이 있을 때 MyGeneric myGeneric = MyGeneric(); 과 같이 제네릭 매개변수를 안넣어주는 경우 raw type이라고 한다. MyGeneric<?>와 같은 와일드 카드 타입을 사용하라. raw type 을 사용하면 제네릭이 안겨주는 안전성과 표현력을 잃는다. 그러므로 절대 쓰지말자

 

 

 

IDE 가 알려주는 제니릭의 경고

제네릭을 사용하면서 생기는 모든 경고는 가능하면 없애라.

경고를 제거할 수 없지만 안전하다고 확신이 들면 @SuppressWarings 를 써도 된다.

대신 주석으로 왜 안전한지 남겨둬라.

그리고 이 어노테이션은 심각한 경고를 놓치게 하는 경우도 생기니 왠만하면 쓰지마라

 

 

 

제네릭으로는 배열을 못 만든다.

배열 대신 리스트를 사용하라. 즉 배열을 만들려면 런타임에 타입이 실체화가 되어야한다. 그러나 제네릭은 런타임에 타입의 정보가 사라진다. 그러므로 제네릭으로 배열을 만드려하면 에러가 난다.

 

저자는 공변을 예로 설명하고 있다.

배열 : Sub가 Super의 하위 타입이면 Sub[]도 Super[]의 하위 타입

리스트 : Sub가 Super의 하위 타입이여도 List<Sub>는 List<Super>의 하위 타입은 아니다.

 

이왕이면 형변환 없이 제네릭으로 사용할 수 있게 만드는 것이 좋다.