try-catch-finally
로 자원을 반납하는 경우를 먼저 살펴보도록 하자.
두 가지를 모두 보고 비교함으로써 왜 try-with-resources
를 사용해야 하는지 이해가 보다 더 잘 갈 것이다.
Java 7 이전까지는....사용 후에 반납해주어야 하는 자원들은 Closable 인터페이스를 통해 구현하고 있으며, 사용 후에 close 메소드를 호출해주어야 했다.
close 메소드를 호출하기 위해서는 try-catch-finally를 이용해야 되었고, 이로 인해서 아래와 같은 문제가 생겼었다.
- 코드가 복잡해짐
- 작업이 번잡함
- 실수나 에러로 인해 자원을 반납하지 못하는 경우가 생김
=> 이로 인해 Java7부터는 자원을 자동으로 반납해주는 try-with-resources
가 문제를 해결하기 위해 나타났다!
try-with-resources는 try에 자원 객체를 전달하면, try 코드 블록이 끝나면 자동으로 자원을 종료해주는 기능이다.
즉, 따로 finally 블록이나 모든 catch 블록에 종료 처리를 하지 않아도 된다.
-> 이때 try에 전달할 수 있는 자원은 AutoCloseable
인터페이스의 구현체로 한정된다!
곧.. 우리는 다음과 같은 이유로 반드시 try-catch-finally가 아닌 try-with-resources를 사용해주어야 한다.