작성자: 프람
작성 일시: 2024.05.06
내용: Effective java 5장 아이템27
인사
안녕하세요. 오늘 두번째 독서 감상문입니다.
오늘이 아니면, 감상문을 작성할 시간이 나지 않을 것 같아
짬이 날때 왕창 써두려고 합니다.
이번 주제는 "비검사 경고를 제거하라"입니다.
비검사 경고가 뭔데?
이번 아이템도 여김없이 제목이 담고 있는 의미가 무엇인지를 먼저 파악해볼까 합니다.
우선(Unchecked Exception과 상관관계가 없습니다!!)
비검사 경고가 등장하는 코드를 만들어 보겠습니다.👍
마구 마구 노란줄이 뜨는게 보이시나요??
실행을 해보면 경고에 대한 디테일 들이 출력되는데요.
경고가 있다고해서 프로그램이 작동하지 않는 것은 아닙니다.
그렇다면 실행 결과를 봐 볼까요?
콘솔 로그와 같이 warning: [unchecked] unchecked conversion 이라는 경고 문구가 있네요??
Unchecked 경고는 이와 같이 제네릭 매개변수를 명시적으로 표현하지 않아주었을때 볼 수 있는 경고입니다.
컴파일러 내부에서 타입 캐스팅을 해줄때 런타임 에러를 뿜을 수 있다는 아주 강력한 경고를 하고 있는 겁니다!!
경고를 무시한 댓가
그렇다면, 이러한 오류를 간과하면 어떤 대가를 치루는지도 함께 봅시다.
기념일에 오늘을 추가해주었습니다.(다만 LocalDate 타입이 아닌, Date 타입으로 말이죠)
각 기념일을 하루씩 빼고 출력하도록 간단하게 로직을 추가해보았습니다.
결과는 예상한대로 ClassCastExecption예외가 발생합니다.
간단한, 코드라 바로 오류를 찾을 수 있겠지만, 프로젝트 크기가 커진다면 찾는것도 엄청나게 힘들겠죠??
그러니까 명시적으로 제네릭 매개변수를 알려줍시다. 그러면 아래와 같이 컴파일 시점에서 오류를 잡아줍니다👍
의도적으로 경고를 끄려면?
그럼에도 불구하고 unchecked 경고를 표시해야하는 경우가 있을 수 있습니다.
이런 경우에는 확실히 제어할 수 있는 경우이므로 경고를 꺼주라고 합니다.
어떻게하면 끌 수 있는지 확인해봅시다.😊
@SupressWarnings 라는 애노테이션을 자바에서 지원해주는데요.
경고가 발생하는 스코프내에 "unchecked"를 매개변수로 넣어주면 아래와 같이
경고 없이 실행할 수 있습니다!!
@SupressWarnings는 unchecked 경고만을 잡아주는 것이 아니고 어려가지 경고를 잡아주는 데
자세한 내용은 SuppressWarning(IBM)[2]을 참고해주세요😊
단, 당연한 이야기지만 책에서 또 강조하는 것은 최대한 쫍은 스코프에 적용해주라네요 😅
결론
컴파일이 뿌려주는 모든 오류는 추후에 댓가를 치루기 싫으면 모두 잡아줘라!!!
참고 자료
'독서 감상문 > Effective Java' 카테고리의 다른 글
비트 필드 대신 EnumSet을 사용하라 (0) | 2024.05.16 |
---|---|
배열보다는 리스트를 사용하라 (0) | 2024.05.09 |
로 타입은 사용하지 말라 (0) | 2024.05.06 |
태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2024.05.03 |
상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (2) | 2024.05.02 |