Java 7에서 도입된 try-with-resources는 자원을 사용한 후 자동으로 닫아주는 기능을 제공하는 패턴입니다. 이를 통해, try-finally 블록으로 처리해야 했던 자원 관리의 번거로움을 해결하고, 코드의 가독성과 안전성을 향상시킬 수 있습니다.
try-with-resources의 장점
- 코드 가독성의 향상
try-with-resources를 사용하면, 자원을 선언하고 사용한 후 finally 블록에서 자원을 닫는 번거로운 작업을 생략할 수 있습니다. 대신, try-with-resources 블록에서 사용한 자원은 자동으로 닫히게 됩니다. 이를 통해, 코드의 가독성을 향상시킬 수 있습니다.
- 자원 관리의 안정성
try-with-resources를 사용하면, 자원이 정확하게 닫히는지에 대한 확인이 필요하지 않습니다. 자원이 사용된 후 자동으로 닫히기 때문에, 메모리 누수 등의 문제를 예방할 수 있습니다.
주의사항
- 자동으로 닫히지 않는 자원은 예외처리를 고려해야 합니다.
try-with-resources는 자원을 자동으로 닫아주는 기능을 제공하지만, 자동으로 닫히지 않는 자원은 일반적인 try-finally 블록을 사용해야 합니다. 이를 통해, 자원 누수를 방지하고 예외처리를 보다 안정적으로 처리할 수 있습니다.
- 자원이 정확하게 닫히는지에 대한 확인이 필요합니다.
try-with-resources를 사용할 때에는, 자원이 정확하게 닫히는지에 대한 확인이 필요합니다. 이를 위해, try-with-resources 블록에서 발생한 예외와 자원이 닫힐 때 발생한 예외를 모두 처리해야 합니다.
예시 코드
다음은 try-with-resources를 사용한 예시 코드입니다.
try (BufferedReader br = new BufferedReader(new FileReader(file))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
위의 코드에서는 BufferedReader와 FileReader를 사용하여 파일을 읽어오고 있습니다. 이때, try-with-resources를 사용하여 BufferedReader와 FileReader가 자동으로 닫히도록 하고 있습니다.
try-with-resources를 사용하지 않은 경우
다음은 try-with-resources를 사용하지 않은 경우의 코드입니다.
BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } }
위의 코드에서는 BufferedReader와 FileReader를 직접 생성하고, finally 블록에서 자원을 닫고 있습니다. 이때, try-with-resources를 사용한 경우보다 코드가 더 복잡해지고 가독성이 떨어지는 것을 볼 수 있습니다.
참고자료
- The try-with-resources Statement (Oracle Java Tutorials)
결론
try-with-resources는 자원을 안전하게 처리하고 코드의 가독성을 향상시키는 좋은 패턴 중 하나입니다. 그러나, 자동으로 닫히지 않는 자원은 일반적인 try-finally 블록을 사용해야 하며, 자원이 정확하게 닫히는지에 대한 확인이 필요합니다. 따라서, 자원을 사용하고 닫는 작업이 필요한 경우에는 try-with-resources 패턴을 사용하는 것이 좋습니다.