Item27. 비검사 경고를 제거하라!
- 제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것이다.
- 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등
- 새로 작성한 코드가 한번에 깨끗하게 컴파일되리라 기대하지는 말자
- 대부분의 비검사 경고는 쉽게 제거 가능하니, 제거하자.
경고의 예
1
Set<Lark> exaltation = new HashSet();
- 컴파일러는 경고를 해준다. 다이아몬드 연산자(<>)를 추가해줘야 한다.
제거하기 어려운 경고
- 포기하지 말자!
- 곧바로 해결되지 않는 어려운 경고라도, 할 수 있는 한 모든 비검사 경고를 제거하라.
- 모두 제거한다면, 그 코드는 타입 안전성이 보장된다.
- 즉, 런타임에 ClassCastException이 발생할 일이 없다.
@SuppressWarnings(“unchecked”) 애너테이션
- 경고를 제거할 수는 없지만 type-safe 하다고 확신할 수 있다면, 위 애너테이션의 사용을 통해 경고를 숨길 수 있다.
- 충분한 검증 없이 경고를 숨기면 안된다.
- 경고 없이 컴파일은 되지만, 여전히 ClassCastException 던질 우려 존재한다.
- 검증된 경고이나 경고를 숨기지 않는 경우
- 진짜 경고가 나와도 눈치채지 못할 수 있다.
- 항상 가능한 한 좁은 범위에 적용하자.
- 애너테이션 사용 시, 그 경고를 무시해도 안전하다는 것이 검증되었다면 그 이유를 항상 주석으로 남겨야 한다.
핵심 정리
- 비검사 경고는 중요하니 무시하지 말자.
- 모든 비검사 경고는 런타임 시 ClassCastException을 던질 우려가 있다. 절대 무시하지는 말자. 최선을 다해 없애자.
- 경고를 없앨 방법을 찾지 못했다면, 가능한 한 좁은 범위에 @SuppressWarnings(“unchecked”) 애너테이션을 붙여 경고를 숨기자.
- 경고를 숨기기 위해 충분한 검증이 필요하며, 그 검증 결과 숨겨도 되는 이유를 주석으로 설명하자.
Comments powered by Disqus.