생에 첫 (실제)프로젝트의 소스 분석을 시작했습니다.
신입 주제에 딱 하루 출근하고,, 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: 사용하지 않은 코드 및 불필요한 코드와 관련된 경고를 억제합니다.
주의하실 점은
안정성이 확실히 보장된 경우 사용해야 하고,
적용 범위를 최소화시키며(클래스 단위 지양),
이유를 별도의 주석으로 작성해주시면 좋다는 점입니다.
'Dev- > Java' 카테고리의 다른 글
싱글톤 객체 성능 향상 --> LazyHolder 사용 (0) | 2019.02.28 |
---|---|
DB에 저장된 DATE, DATETIME 타입의 시간부분이 나오지 않을 때.. (TimeStamp) (0) | 2018.09.16 |
컬렉션 프레임워크란 (0) | 2018.08.23 |
제네릭이란 (0) | 2018.08.22 |
프로세스, 스레드 (0) | 2018.08.22 |