티스토리 뷰

JAVA

unchecked warning은 제거하라

세댕댕이 2022. 7. 26. 01:07

* 이펙티브 자바 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)가 발생할 가능성이 존재한다는 것이다.

제네릭 사용시 발생할 수 있는 무점검 경고들은 가급적 전부 제거하는 습관을 들이자

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함