아이템 29 - 이왕이면 제네릭 타입으로 만들라
-> 이런식으로 형 변환 되는 것을 눈에 보이게 작성해주는 것을 명시적 형 변환이라고 하는데,
Object [] elements = (Object[])new E[DEFAULT_VALUE]
(참고 : 일반적인 타입을 뜻하는 것은 E, T 두가지 종류가 있는데, 컬렉션이나 배열 등에 '요소(Element)'로 쓰이는 타입은 E로 쓰고 그외에는 T로 쓴다.)
클라이언트 단에서 직접 형변환해야 하는(위 예시처럼) 타입보다는 제네릭 타입으로 선언하여, (위의 예시에서 E와 같은)
형변환 없이도 바로 사용할 수 있도록 하는게 좋다.
그렇게 하기 위해서 제네릭 타입으로 만들어 주는게 좋다는 의미이다.
타입이 다음과 같이 제네릭으로 되어 있으면,
Stack<E> //제네릭 타입
제네릭 타입으로 선언된 부분에 클라이언트 측에서 사용시 필요한 타입을 넣을 수 있기 때문에 가용성도 좋아지고,
명시적 형변환이 필요없게 되어 더 좋다.
타입 매개변수에 제약을 두는 제네릭 타입도 있는데,
class DelayQueue<E extends Delayed> implements BlockingQueue<E>
이 방식을 통해, DelayQueue 자신과 DelayQueue를 사용하는 클라이언트측에서는 DelayQueue에서 원소를 호출할 때, 명시적 형변환 등의 작업이 없이도 Delayed 클래스의 메소드를 호출할 수 있는 이점이 생긴다.
또한, DelayQueue<Delayed>로도 사용할 수 있다.
'책(독서)' 카테고리의 다른 글
[이펙티브자바] ~180p item 30 (0) | 2020.10.23 |
---|---|
[이펙티브자바] ~169p item 25~28 (0) | 2020.10.20 |
[이펙티브자바] ~149p item 21~24 (0) | 2020.10.19 |
[이펙티브자바] ~135p item 17~20 (0) | 2020.10.13 |
[이펙티브자바] ~104p item 13~16 (0) | 2020.10.12 |