item9 - try-finally 보다 try-with-resources을 사용하라
try finally 를 많이 개선한 try-with-resources 이라는 방식을 자바 7이후부터 제공해주고 있다
사용하는데 있어서 보면, 만약에 문제가 생겨서 finally에서 닫아야하는 것이 이렇게 2가지가 있다고 가정해보자
이중으로 이렇게 닫는 것이 과연.. 좋은 것일까? 그렇다고 하나의 finally에서 in.close()와 out.close() 을 한꺼번에 닫는 행위는 잘못된 행위이다 왜냐하면 out.close(); in.close(); 이렇게 있다고 가정해봤을 때 out.close()에서 에러가 난다면? in.close()는 그럼 실행되지 않을텐데? 그렇기 떄문에 이중으로 구현하는 것이 좋은 방법이라고 볼 수는 없는 것이다
그래서 위의 방식을 대신하는 좋은 방법인 try-with-resources 의 방법은 이러하다
달라진점은 이러하다, try 내부에서 사용할 것이며, finally 에서 회수해야할 필요가 있는 그러한 객체들을 try 문을 시작하기 전에 괄호를 열고 그 내부에다가 위의 객체들을 선언해주는 것이다 이렇게 해두면 따로 close 해줄 필요 없이 close 을 어느정도 보장해주는 그러한 방식이다
이외에도 장점은 예외 stacktrace 이다 만약 try 내부에서 예외가 2개가 발생한다고 가정했을 때, 항상 예외가 발생하면서 첫 번째 예외만을 보여주었다 그 밑의 예외는 첫 번째 예외가 발생했기 떄문에 따로 보여주지 않고 무시되기 마련이였는데, try-with-resource를 사용함으로써, 첫 번째 이후의 예외를 suppressed 에 넣어서 보여주는 그러한 기능이 존재한다. 이를 통해서 두 개의 모든 예외가 한꺼번에 보이는, 모든 에러가 보여지는 그러한 장점이 존재한다 -> 정말 좋은 기능이다..! try-with-resources가 실제 바이트코드로 만들어진 것을 확인해보면 계속해서 에러가 있다면 잡고잡고 잡아서 suppressed 에 넣어주기 때문에 이렇게 된 것이다
이렇게 try-finally가 아니라 try-with-resource를 사용하게 되면, 장점이 많다 첫 번째로 코드가 간결해지고 두 번째로 굳이 finally를 구현하지 않아도 Close가 보장되며 세 번째로 내부의 예외가 한 꺼번에 보이며 네 번째로 이것을 사용하면서도, catch, finally를 구현해서 사용하는 것이 가능하다
정말 사용하기 좋은 그러한 기능이라고 생각된다..!
Last updated
Was this helpful?