Try-with-resources 구문을 사용하는 것이 좋습니다.

 

Java 7부터 Closeable 리소스가 안전히 종료되는 것을 보장하는 try-with-resources 구문을 도입했습니다. 새로운 구문은 방탄 조끼에 가깝기 때문에, 이전 버전의 try/catch/finally을 사용하는 것보다 선호되어야 합니다.

이 규칙은 Closeable 리소스가 try-with-resources구문에서 열려 있는지를 확인합니다.

참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 7보다 낮은 경우(java7) 자동으로 비활성화됩니다.

규칙을 어긴 코드

FileReader fr = null;
BufferedReader br = null;
try {
  fr = new FileReader(fileName);
  br = new BufferedReader(fr);
  return br.readLine();
} catch (...) {
} finally {
  if (br != null) {
    try {
      br.close();
    } catch(IOException e){...}
  }
  if (fr != null ) {
    try {
      br.close();
    } catch(IOException e){...}
  }
}

규칙을 준수한 해결책

try (
    FileReader fr = new FileReader(fileName);
    BufferedReader br = new BufferedReader(fr)
  ) {
  return br.readLine();
}
catch (...) {}

또는

try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { // 원하지 않으면, 리소스의 이름을 지정하지 않아도 됩니다.
  return br.readLine();
}
catch (...) {}

같이보면 좋은 자료

  • CERT, ERR54-J - closeable 리소스를 안전하게 다루기 위해 try-with-resources 구문을 사용하라는 글

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project