try-with-resources가 좋은 패턴일까?

try-with-resources가 좋은 패턴일까?

Java 7에서 도입된 try-with-resources는 자원을 사용한 후 자동으로 닫아주는 기능을 제공하는 패턴입니다. 이를 통해, try-finally 블록으로 처리해야 했던 자원 관리의 번거로움을 해결하고, 코드의 가독성과 안전성을 향상시킬 수 있습니다.

try-with-resources의 장점

  1. 코드 가독성의 향상

try-with-resources를 사용하면, 자원을 선언하고 사용한 후 finally 블록에서 자원을 닫는 번거로운 작업을 생략할 수 있습니다. 대신, try-with-resources 블록에서 사용한 자원은 자동으로 닫히게 됩니다. 이를 통해, 코드의 가독성을 향상시킬 수 있습니다.

  1. 자원 관리의 안정성

try-with-resources를 사용하면, 자원이 정확하게 닫히는지에 대한 확인이 필요하지 않습니다. 자원이 사용된 후 자동으로 닫히기 때문에, 메모리 누수 등의 문제를 예방할 수 있습니다.

주의사항

  1. 자동으로 닫히지 않는 자원은 예외처리를 고려해야 합니다.

try-with-resources는 자원을 자동으로 닫아주는 기능을 제공하지만, 자동으로 닫히지 않는 자원은 일반적인 try-finally 블록을 사용해야 합니다. 이를 통해, 자원 누수를 방지하고 예외처리를 보다 안정적으로 처리할 수 있습니다.

  1. 자원이 정확하게 닫히는지에 대한 확인이 필요합니다.

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를 사용한 경우보다 코드가 더 복잡해지고 가독성이 떨어지는 것을 볼 수 있습니다.

참고자료

결론

try-with-resources는 자원을 안전하게 처리하고 코드의 가독성을 향상시키는 좋은 패턴 중 하나입니다. 그러나, 자동으로 닫히지 않는 자원은 일반적인 try-finally 블록을 사용해야 하며, 자원이 정확하게 닫히는지에 대한 확인이 필요합니다. 따라서, 자원을 사용하고 닫는 작업이 필요한 경우에는 try-with-resources 패턴을 사용하는 것이 좋습니다.

답글 남기기