본문 바로가기

정리/IT공부

[Java] SuppressWarnings 종류

728x90

Java를 사용하며 많이 노출이되는 경고 문구들이 있습니다. 이를 정리하기 위해 SuppressWarnings 어노테이션을 사용하곤합니다. 여기서 이에 대해 설명을 해보겠습니다.

 

[목차]

1. SuppressWarnings 란?
2. 언제 사용하게 되는가?
3. Parameter 종류 : 경고 유형
4. 사용시 주의사항

 

 

1. SuppressWarnings 란?

Java 로 개발을 진행하다보면 필요 이상의 주석 알람이 표기될 때가 있습니다. 단순한 일시적인 오류일 수도 있고, 지속적으로 켜고 킬때마다 로딩을 오래걸리게 하는 요인이 되기도 합니다. 

SuppressWarnings 는  이런 경고 알람들을 제어할 수 있는 Annotation type입니다. 특정 메서드에서 경고를 표시하지 않으려면 클래스 대신 해당 메서드에 주석을 달아야 합니다.  

 


2. 언제 사용하게 되는가?

 

 그렇다면 언제 사용하게 되는가? 코드를 통합/혼용하면서 사용하게 됩니다.

즉, 다음과 같은 상황에서 사용하게 됩니다.

 

호환성 유지: 기존 코드베이스의 호환성을 유지하면서 새로운 Java 버전을 사용하는 경우, 이전 버전의 코드에서는 사용되지 않을 수 있는 새로운 기능 또는 특정 경고를 억제할 수 있습니다.

레거시 코드와의 통합: 레거시 코드베이스와 새로운 코드를 통합하는 경우, 레거시 코드에서 발생하는 경고를 일시적으로 억제하고 이후에 개선하도록 할 수 있습니다.

정적 분석 도구와의 통합: 정적 코드 분석 도구는 코드 품질을 평가하고 경고를 생성하는데, 이러한 도구에서 생성된 경고를 억제하여 적절한 수정 작업을 수행할 수 있습니다.

설정 및 환경에 따른 다양한 상황 처리: 프로젝트의 설정이나 환경에 따라 특정 경고를 다루는 방식을 조절하고자 할 때 @SuppressWarnings를 사용합니다.

코드 유지 관리와 개선: 미사용 코드 요소를 나중에 삭제하거나 수정할 때까지 경고를 억제하여 코드 유지 관리 작업을 용이하게 만듭니다.

 

3. Parameter 종류 : 경고 유형

@SuppressWarnings 어노테이션에 사용할 수 있는 인자(값)는 경고의 종류를 지정하는데 사용됩니다. Java에서는 다양한 경고 유형이 있으며, @SuppressWarnings 어노테이션을 사용하여 특정 경고 유형을 무시하도록 지정할 수 있습니다. 일반적으로 다음과 같은 인자를 사용할 수 있습니다:

unchecked: 이 인자는 제네릭 타입에서 발생하는 "unchecked" 경고를 무시합니다. 제네릭 코드에서 형 변환 경고를 억제하는 데 사용됩니다.

@SuppressWarnings("unchecked")
public List<String> getList() {
    List list = new ArrayList();
    list.add("Item 1");
    return list;
}


deprecation: 이 인자는 사용되지 않는 메서드나 클래스 등을 나타내는 "deprecation" 경고를 무시합니다.


@SuppressWarnings("deprecation")
public void useDeprecatedMethod() {
    SomeDeprecatedClass.deprecatedMethod();
}


rawtypes: 이 인자는 로(raw) 타입을 사용한 경우 발생하는 경고를 무시합니다. raw 타입은 제네릭을 사용하지 않는 타입을 나타냅니다.

@SuppressWarnings("rawtypes")
public List getList() {
    List list = new ArrayList();
    list.add("Item 1");
    return list;
}


unused: 이 인자는 사용하지 않는 변수, 메서드 또는 필드 등에 대한 "unused" 경고를 무시합니다.

@SuppressWarnings("unused")
public void unusedMethod() {
    int unusedVariable = 42;
}


all: "all"이라는 특별한 인자를 사용하면 모든 종류의 경고를 무시합니다. 모든 경고를 억제하고자 할 때 사용됩니다.

@SuppressWarnings("all")
public void someMethod() {
    // 모든 경고 무시
}


이 외에도 @SuppressWarnings를 사용하여 특정 커스텀 경고 메시지를 무시하거나 경고의 세부 유형을 지정하는 방법도 있습니다. 경고 메시지의 정확한 이름은 컴파일러 또는 정적 분석 도구의 문서를 참조하여 확인할 수 있습니다. 경고 억제 인자는 컴파일러 및 사용하는 Java 버전에 따라 다를 수 있으므로 해당 Java 버전의 문서를 확인하는 것이 좋습니다.

 

 

 

 

4. 사용시 주의사항

 

그렇다고 무조건 SuppressWarnings을 남용하는 것은 좋지 않습니다.

일단 최소한으로 사용해야 합니다.  @SuppressWarnings는 경고를 무시하는 기능을 제공하므로 최소한으로 사용해야 합니다. 경고를 무시하는 대신 코드 개선을 우선 고려하고, 경고를 억제하는 것은 마지막 수단으로 사용해야 합니다.

그 다음으로 보안 및 안정성 고려하여 적용해야합니다.경고 억제가 보안 문제를 발생시키거나 악용될 수 있는 상황에서는 사용을 피해야 합니다. 코드의 안전성과 안정성을 위해 경고를 무시하는 결정은 신중하게 내려져야 합니다.

 

최종적으로 문서화 및 주석을 해줘야합니다. @SuppressWarnings를 사용한 이유를 명확하게 문서화하고 주석으로 설명해야 합니다. 다른 개발자나 팀원이 당시의 코드를 이해하고 상황에 대한 이해를 위해 그리고 구체적인 경고 억제 이유를 파악할 수 있도록 합니다.

 

이처럼 주의해서 사용해야 하며, 실제로 개선할 계획이 없거나 보안 문제 등을 초래할 수 있는 경우에는 사용하지 말아야 합니다.

 

 

참고 주소 : https://www.ibm.com/docs/ko/radfws/9.6.1?topic=code-excluding-warnings