@SuppressWarnings 란?
- 컴파일러 경고를 사용하지 않도록 설정해주는 기능이다.
- intellij 에서 노란색으로 경고 표시줄이 나타나는 경우 그 경고표시를 무시할 수 있다.
- 대신 주석으로 그 이유를 명시해 주는 것이 좋다.
- 두 가지의 종류를 같이 사용할 때는 @SuppressWarnings({"unused", "unchecked"})처럼 객체 형식으로 묶어서 사용한다.
속성
- all : 모든 경고
- cast : 캐스트 연산자 관련 경고
- dep-ann : 사용하지 말아야 할 주석 관련 경고
- deprecation : 권장되지 않는 기능과 관련된 경고
- fallthrough : switch문에서 break 누락 관련 경고
- finally : 반환하지 않는 finally 블럭 관련 경고
- null : null 분석 관련 경고
- rawtypes : 제너릭을 사용하는 클래스 매개 변수가 불특정일 때의 경고
- unchecked : 검증되지 않은 연산자 관련 경고
- unused : 사용하지 않는 코드 관련 경고
코드 예시
@SuppressWarnings("unused")
- 사용하지 않는 코드 관련 경고를 무시한다.
- intellij 에서는 사용하지 않은 변수를 회색으로 보여지는데, 해당 어노테이션을 붙이면 회색으로 보이지 않는다.
@SuppressWarnings("unused")
private final Logger logger = LoggerFactory.getLogger(getClass());
@SuppressWarnings("serial")
@SuppressWarnings("serial")
public class Member implements Serializable{
private static final long serialVersionUID = 1L;
private String memberId;
private String memberPass;
private String memberEmail;
//...
}
- 위 상황에서 serialVersionUID를 누락시키면 노란색으로 경고가 나타난다.
- 이런 경우, @SuppressWarnings("serial") 를 붙이면 경고를 무시할 수 있지만 권장되는 방식은 아니다.
@SuppressWarnings("all")
- @SuppressWarnings("all")은 모든 경고를 억제시켜준다.
- 모든 경고가 표시 되지 않으므로 프로그램을 실행할 떄 RuntimeException 오류가 발생할 수 있으므로 사용하지 않는 것을 권장한다.
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation") 권장되지 않는 기능과 관련된 경고를 억제한다.
public class Superclass {
@Deprecated
public void foo() {
}
}
class Subclass extends Superclass {
@SuppressWarnings("deprecation")
public void foo() {
}
}
@SuppressWarnings("null")
- @SuppressWarnings("null")은 널(null) 분석과 관련된 경고를 억제한다.
@SuppressWarnings("unchecked")
- @SuppressWarnings("unchecked")은 미확인 오퍼레이션과 관련된 경고를 억제한다.
public <T> T[] toArray(T[] a){ if(a.length < size){ /* 아래의 형 변환은 배열의 자료형이 인자로 전달된 자료형인 T[]와 같으므로 형 변환이 정확하므로 @SuppressWarnings("unchecked")처리 함 */ @SuppressWarnings("unchecked") T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass()); return result; } System.arraycopy(elements, 0, a, 0, size); if(a.length > size) a[size] = null; return a; }
@SuppressWarnings("rawtypes")
class Foo<T> {
//...
}
@SuppressWarnings("rawtypes")
Foo foo = new Foo();
- 위와 같이 매개변수 타입이 불특정할 때 알려주는 경고를 무시할 수 있다.
- 개발할 때는 HashMap 을 사용할때 종종 볼 수 있는 경고이다.
@SuppressWarnings("rawtypes")
Map a = new HashMap();
REFERENCES
'Java' 카테고리의 다른 글
직렬화 (0) | 2022.05.30 |
---|---|
ENUM 활용 (0) | 2022.03.14 |
Method Reference (0) | 2022.03.06 |
Collectors (JAVA STREAM) (0) | 2022.03.06 |
LazyEvaluation,Curry,IntStream (0) | 2022.03.06 |