모르지 않다는 것은 아는것과 다르다.

Java

@SuppressWarnings

채마스 2022. 5. 30. 23:54

@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