간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

JAVA/이펙티브 자바

27. 비검사 경고를 제거하라

2023. 7. 16. 18:19
728x90

제네릭을 사용하기 시작하면 수많은 컴파일러 경고가 생긴다.

 

비검사 경고는 컴파일러가 타입 안정성에 대한 정보를 충분히 확인하지 못했을 때 발생한다.

 

할 수 있는 한 모든 비검사 경고를 제거해야 한다.

 

비검사 경고는 런타임에 ClassCastException을 일으킬 수 있는 잠재적 가능성을 뜻한다.

 

타입 캐스팅으로 인해 런타임에 exception이 발생하면 경우에 따라 많은 소스를 훑어봐야 할 수도 있다..( 극 고통 발생 )

 

 

경고를 제거할 수는 없지만 타입이 안전하다고 확실할 수 있다면 @SuppressWarnings("unchecked") 애너테이션을 달아 경고를 숨길 수 있다.

 

하지만 너무 넓은 범위에 해당 어노테이션을 사용하면 어노테이션으로 인해 문제가 숨겨질 수 있으니 가능한한 좁은 범위에 사용하면 되겠다.


 

 

SuppressWarnings 어노테이션 내부에서 사용할 수 있는 토큰 목록

  • all 모든 경고를 억제합니다.
  • boxing boxing/unboxing 오퍼레이션과 관련된 경고를 억제합니다.
  • cast 캐스트 오퍼레이션과 관련된 경고를 억제합니다.
  • dep-ann 권장되지 않는 어노테이션과 관련된 경고를 억제합니다.
  • deprecation 권장되지 않는 기능과 관련된 경고를 억제합니다.
  • fallthrough switch 문에서 누락된 break 문과 관련된 경고를 억제합니다.
  • finally 리턴되지 않는 마지막 블록과 관련된 경고를 억제합니다.
  • hiding 변수를 숨기는 로컬과 관련된 경고를 억제합니다.
  • incomplete-switch switch 문에서 누락된 항목과 관련된 경고를 억제합니다(enum case).
  • javadoc javadoc 경고와 관련된 경고를 억제합니다.
  • nls 비nls 문자열 리터럴과 관련된 경고를 억제합니다.
  • null 널(null) 분석과 관련된 경고를 억제합니다.
  • rawtypes 원시 유형 사용법과 관련된 경고를 억제합니다.
  • resource 닫기 가능 유형의 자원 사용에 관련된 경고 억제
  • restriction 올바르지 않거나 금지된 참조 사용법과 관련된 경고를 억제합니다.
  • serial 직렬화 가능 클래스에 대한 누락된 serialVersionUID 필드와 관련된 경고를 억제합니다.
  • static-access 잘못된 정적 액세스와 관련된 경고를 억제합니다.
  • static-method static으로 선언될 수 있는 메소드와 관련된 경고를 억제합니다.
  • super 수퍼 호출을 사용하지 않는 메소드 겹쳐쓰기와 관련된 경고를 억제합니다.
  • synthetic-access 내부 클래스로부터의 최적화되지 않은 액세스와 관련된 경고를 억제합니다.
  • sync-override 동기화된 메소드를 오버라이드하는 경우 누락된 동기화로 인한 경고 억제
  • unchecked 미확인 오퍼레이션과 관련된 경고를 억제합니다.
  • unqualified-field-access 규정되지 않은 필드 액세스와 관련된 경고를 억제합니다.
  • unused 사용하지 않은 코드 및 불필요한 코드와 관련된 경고를 억제합니다.

 

 

 

 


질문 1. 비검사 경고(Unchecked Warning)란 무엇인가? 왜 제거해야 하는가?                                                                                        

 

비검사 경고(Unchecked Warning)은 제네릭을 사용할 때 컴파일러가 타입 캐스팅에 대한 충분한 정보를 확인하지 못해 발생하는 경고이다.

 

원시타입이나, 제네릭에서 타입을 제대로 지정하지 않는 경우에 발생할 수 있다.

 

비검사 경고를 제대로 제거하지 않으면 런타임에 캐스팅 관련 에러가 발생할 수 있다.

 

 

 

 

질문 2. 비검사 경고를 없애는 방법은?                                                                                                                                                    

 

원시타입을 사용하지 않고 제네릭을 사용하고, 제네릭 사용시 타입 매개변수를 제대로 지정하여 타입 안정성을 유지한다,

 

경고가 발생하는 지점에서 @SuppressWarnings 를 사용하여 경고를 억제할 수 있으나 해당 어노테이션으로 인해 문제가 숨겨질 수 있으니 가능한한 좁은 범위내에서 사용해야 한다.

728x90
저작자표시 (새창열림)

'JAVA > 이펙티브 자바' 카테고리의 다른 글

29,30. 이왕이면 제네릭 타입으로 만들라  (0) 2023.07.16
28. 배열보다는 리스트를 사용하라  (0) 2023.07.16
26. 로 타입을 사용하지 말라 ( 제네릭, 타입 안정성 )  (0) 2023.07.10
25. 톱레벨 클래스는 한 파일에 하나만 담으라  (0) 2023.07.10
24. 멤버 클래스는 되도록 static으로 만들라 ( 멤버 클래스,어댑터 패턴 )  (0) 2023.07.10
    'JAVA/이펙티브 자바' 카테고리의 다른 글
    • 29,30. 이왕이면 제네릭 타입으로 만들라
    • 28. 배열보다는 리스트를 사용하라
    • 26. 로 타입을 사용하지 말라 ( 제네릭, 타입 안정성 )
    • 25. 톱레벨 클래스는 한 파일에 하나만 담으라
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바