반응형
[Effective Java] 제네릭 타입을 애용하자. |
-
클래스를 제네릭화 하는 방법.
-
1. 클래스 선언부에 하나 이상의 타입 매개변수를 추가.
-
2. 코드 안에 나오는 모든 Object 타입을 그것에 맞는 타입 매개변수로 변경한 후 컴파일.
new E[ size ] 와 같은 부분에서 보통 에러가 난다.
이를 피해가는 방법 1.
E[] elements = (E[]) new Object[ size ]; // 타입 안전하진 않다.
이를 피해가는 방법 2.
Object[] elements = new Object[ size ]; // 사용하는 부분에서 casting 이 필요하다..
scalar 타입보다 배열 타입에 대한 unchecked 캐스트 경고를 억제하는 것이 더 위험하므로, 2번 방법이 더 적합해 보인다.
하지만 저런 식의 E[] array 를 사용하는 곳이 많다면 매번 casting 을 해줘야 하기 때문에 실무에서는 1번 방법을 선택하는 경우가 더 많다.
여튼 상황(코드)에 따라 취사선택은 해야 한다.
new E[] 를 피하기 위해 안쪽에서도 List 를 사용하는 것은 고려해봐야 한다.
Java 언어 자체에서 List 를 primitive 계열로 지원하는 것이 아니기 때문에 성능 이슈가 생길 수 있다.
Summary
클라이언트 코드에서 캐스팅을 해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 쉽다.
새로운 타입 설계할 때는 캐스팅 없이 사용 가능한지 검토하고 그렇게 하게 하자. ( -> 제네릭화 )
시간이 닿는 대로 제네릭으로 바꿀 수 있는 부분을 제네릭으로 바꾸자.
그럼 기존 클라이언트 코드에 영향을 주지 않고 그 타입을 더 쉽게 사용할 수 있다.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 바운드 와일드 카드를 사용해서 API 의 유연성을 높이자. (0) | 2016.12.05 |
---|---|
[Effective Java] 제네릭 메소드를 애용하자. (0) | 2016.12.01 |
[Effective Java] 배열보다는 List 를 사용하자. (0) | 2016.11.28 |
[Effective Java] 컴파일 경고 메세지가 없게 하자. (0) | 2016.11.24 |
[Effective Java] 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자. (0) | 2016.11.22 |
댓글