본문 바로가기

Dev-/Java

@SuppressWarning란?

생에 첫 (실제)프로젝트의 소스 분석을 시작했습니다.

신입 주제에 딱 하루 출근하고,, 4일동안 예비군중이라 다음주가 좀 걱정되기도 하네요.


소스에 처음보는 @SuppressWarning이라는 어노테이션이 있어 간단히 남깁니다.




기본적으로 컴파일러경고수준은 최대로 켜져 있습니다. 

생각해보면 이는 당연한 것이고,


사용해야 하는 입장에서 봤을 때

불필요한 컴파일 경고를 최대한 없앨수록 프로그래머에 대에 높은 신뢰도를 가질 수 있습니다.


바로 이럴 때 @SuppressWarning가 사용됩니다.



특히 제네릭을 사용할때 unchecked ~~ 와 같은 컴파일 경고 메세지가 많이 발생하는데,

이를 그대로 둔다면 컴파일 시 ClassCastException이 발생하기 때문에

코딩시 해당 부분을 없애기 위해 많은 노력을 합니다.


하지만 그럼에도 불구하고, 해당 부분을 제거할 수는 없을 때,,,

안정성이 충분히 보장되었다고 생각하는 경우,


역시나 @SuppressWarning를 사용해 부분적으로 경고를 제거해주어야 

깔끔하고 신뢰도 있는 코드가 완성됩니다.




@SuppressWarning의 사용법은 아래와 같습니다.


@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: 사용하지 않은 코드 및 불필요한 코드와 관련된 경고를 억제합니다.




주의하실 점

안정성이 확실히 보장된 경우 사용해야 하고,

적용 범위를 최소화시키며(클래스 단위 지양),

이유를 별도의 주석으로 작성해주시면 좋다는 점입니다.