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.