티스토리 뷰
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다.
24. unchecked warning(무점검 경고)을 제거하라
unchecked 하니까 checked exception이랑 unchecked exception이 먼저 생각나는데 그런건 아니다.
컴파일 시에 발생하는 여러 Warning들(노란 느낌표) 이야기. - 잠재적 위험을 갖고있음을 뜻함
unchecked warning중 상당수는 쉽게 없앨 수 있는 것들이다.
- 무점검 형변환 경고(unchecked cast warning)
- 무점검 함수 호출 경고(unchecked method invocation warning)
- 무점검 제네릭 배열 생성 경고(unchecked generic array creation warning)
- 무점검 변환 경고(unchecked conversion warning)
그리고, 이러한 무점검 경고는 가능하다면 없애야 한다. 그러한 경고를 없애게 되면 코드의 형 안전성이 보장된다.
-> 프로그램이 원하는대로 동작할 가능성이 커진다는 뜻이다.
제거할 수 없는 경고 메시지는 형 안전성이 확실할 때에만 @SupressWarnings("unchecked") 애노테이션을 사용해 억제한다.
- 가능한 한 작은 범위에 적용해라. (주로 변수 선언이나 아주 짧은 메서드, 생성자에 붙인다. 절대 클래스 전체에 적용하지 마라) 이런거 잘못 사용하면 안쓰는것보다 더 못한 심각한 결과를 불러온다....
- 경고를 왜 강제로 없애는지 주석은 당연히 달아줘야 한다.
// java.util.ArrayList.class
@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
(결론)
무점검 경고가 발생한다는 것은 프로그램 실행 도중 예외(ClassCastException)가 발생할 가능성이 존재한다는 것이다.
제네릭 사용시 발생할 수 있는 무점검 경고들은 가급적 전부 제거하는 습관을 들이자
'JAVA' 카테고리의 다른 글
상수 대신 Enum을 사용하라 (2) | 2022.07.27 |
---|---|
배열보다 리스트를 사용해라 (0) | 2022.07.26 |
raw type은 사용하지 마라 (0) | 2022.07.25 |
자바의 내부 클래스와 중첩 클래스에 대해.. (0) | 2022.07.25 |
인터페이스를 활용해 전략 패턴을 사용하자 (0) | 2022.07.25 |