Home [Effective Java] Item27. 비검사 경고를 제거하라!
Post
Cancel

[Effective Java] Item27. 비검사 경고를 제거하라!

Item27. 비검사 경고를 제거하라!

  • 제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것이다.
    • 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등
  • 새로 작성한 코드가 한번에 깨끗하게 컴파일되리라 기대하지는 말자
  • 대부분의 비검사 경고는 쉽게 제거 가능하니, 제거하자.

경고의 예

1
Set<Lark> exaltation = new HashSet();
  • 컴파일러는 경고를 해준다. 다이아몬드 연산자(<>)를 추가해줘야 한다.

제거하기 어려운 경고

  • 포기하지 말자!
    • 곧바로 해결되지 않는 어려운 경고라도, 할 수 있는 한 모든 비검사 경고를 제거하라.
    • 모두 제거한다면, 그 코드는 타입 안전성이 보장된다.
      • 즉, 런타임에 ClassCastException이 발생할 일이 없다.

@SuppressWarnings(“unchecked”) 애너테이션

  • 경고를 제거할 수는 없지만 type-safe 하다고 확신할 수 있다면, 위 애너테이션의 사용을 통해 경고를 숨길 수 있다.
  • 충분한 검증 없이 경고를 숨기면 안된다.
    • 경고 없이 컴파일은 되지만, 여전히 ClassCastException 던질 우려 존재한다.
  • 검증된 경고이나 경고를 숨기지 않는 경우
    • 진짜 경고가 나와도 눈치채지 못할 수 있다.
  • 항상 가능한 한 좁은 범위에 적용하자.
  • 애너테이션 사용 시, 그 경고를 무시해도 안전하다는 것이 검증되었다면 그 이유를 항상 주석으로 남겨야 한다.

핵심 정리

  • 비검사 경고는 중요하니 무시하지 말자.
  • 모든 비검사 경고는 런타임 시 ClassCastException을 던질 우려가 있다. 절대 무시하지는 말자. 최선을 다해 없애자.
  • 경고를 없앨 방법을 찾지 못했다면, 가능한 한 좁은 범위에 @SuppressWarnings(“unchecked”) 애너테이션을 붙여 경고를 숨기자.
    • 경고를 숨기기 위해 충분한 검증이 필요하며, 그 검증 결과 숨겨도 되는 이유를 주석으로 설명하자.
This post is licensed under younghwani by the author.

[Effective Java] Item26. 로 타입은 사용하지 말라!

[Effective Java] Item28. 배열보다는 리스트를 사용하라!

Comments powered by Disqus.