차근차근/JAVA JSP

Java에서 Warning 해결 방법들

예쁜꽃이피었으면 2014. 10. 29. 12:55

http://www.mimul.com/pebble/default/2009/12/04/1259937540000.html


코딩을 하다가 보면 워닝이나 에러등이 프로젝트내에서 보이면 대부분의 개발자는 없앨려고 할 것입니다. 지저분하게 코딩을 하지 않기 위함은 물론이거니와 Error나 Warning같은 것을 그냥 두고 코딩을 할 경우 코딩의 신뢰성에 많은 의협이 되니깐요. 또한, 그런 코딩 자세가 버그를 양산할 수 있으므로 지양을 할 것입니다. 그래서 오늘은 에러는 다잡는데, Warning은 그대로 두시는 분들이 계셔서 깔끔하게 정리하는 방법들을 공유합니다.

가장 큰 포인트는 아래 방법들은 회피하는 방법이 많습니다. 근본적인 해결방안은 Warning을 발생시키지 않는 것입니다. 회피하는 것보다는....

1. Avoid raw types
 - 사유 : List, Map.Entry, HashMap 등에서 불필요한 캐스팅을 막기 위해 Generics에서 parametric types 을 지정해 주도록 하기 위해 Warning을 띄움
 - 해결책
   . List<String>, Map.Entry<String, String> 등으로 명시적 타입으로 지정함

2. Type safety: Unchecked cast 
 - 사유 : Generics을 사용해서 타입을 지정했지만 해당 값이 Object일 경우 "Type safety: Unchecked cast"라는 Warning을 남김
 - 해결책 : 정확한 타입 캐스팅을 지정하거나 안되면 아래와 같이 Annotation을 해당 문 위에 적용함
   . 근본적인 대책은 명시적인 타입 사용을 원칙으로 함
   . @SuppressWarnings (value="unchecked") 혹은 @SuppressWarnings("unchecked")

3. Serializable class does not declare
 - 사유 : implements java.io.Serializable한 클래스나 해당 클래스를 상속받은 클래서에서는 serialVersionUID 상수를 선언해줘야  deserialization(serialization 했던 객체를 복구하는 과정)과정에서 예상하지 못한 InvalidClassExceptions을 유발성을 제거할 수 있음
 - 해결책
   . serialVersionUID 선언(public static final long serialVersionUID = 24362462L;)
   . 그외 @SuppressWarnings("serial")

4. deprecated code 
 - 사유 : 더이상 사용치말라는 함수에 @Deprecated를 사용하여 Warning을 뿌려줌
 - 해결책
   . 기본적으로 해당 함수는 사용하지 않는것이 원칙임
   . 부득이 사용해야할 경우 @SuppressWarnings("deprecation")

5. [fallthrough] possible fall-through into case
 - 사유 : switch문에서 break문이 빠져있을 경우 일반적으로 컴파일하면 Warning이 안뜨는데 컴파일 옵션에서 -Xlint:fallthrough 를 주고 컴파일하면 Warning이뜸
 - 해결책
   . 부득이 사용할 경우 @SuppressWarnings("fallthrough")

[참고사항 : Sun JDK (1.6) 에서 지원하는  Warnings]
  • deprecation : Check for use of depreciated items.
  • unchecked : Give more detail for unchecked conversion warnings that are mandated by the Java Language Specification.
  • serial : Warn about missing serialVersionUID definitions on serializable classes.
  • finally : Warn about finally clauses that cannot complete normally.
  • fallthrough : Check switch blocks for fall-through cases and provide a warning message for any that are found.
  • path : Check for a nonexistent path in environment paths (such as classpath).


반응형