반응형
기존에 Try Catch 문을 사용할 경우
파일을 열거나 특정 url 등을 열거나 할 경우 종료 이후에 close를 반드시 해줘야만 했다.
그렇지 못할 경우에는 자원의 낭비가 생기고 심하게는 서버가 죽을 경우도 있다.
예를들어 코드가 아래와 같다.
try{ ..이상 생략 BufferedReader reader = new BufferedReader(new InputStreamReader(url)); ..이하 생략 } catch (MalformedURLException e) { reader.close(); e.printStackTrace(); throw e; } |
혹은 finally 로 묶어서 닫아주고는 한다.
try{ ..이상 생략 BufferedReader reader = new BufferedReader(new InputStreamReader(url)); ..이하 생략 } catch (MalformedURLException e) { e.printStackTrace(); throw e; } finally { reader.close(); } |
위 코드의 단점은 여러가지가 있지만 몇가지를 말하면,
- 실수로 닫지 못할 경우 위험함
- 코드의 지저분함
- 통일성 없음
- 등등
이런 이유로 Java7 이후로 부터는
try-with-resources
를 지원하게 되었다.
위 코드를 아래와 같이 가볍게 변환할수 있다.
try (BufferedReader reader = new BufferedReader(new InputStreamReader(url))){ ..이상 생략 .. ..이하 생략 } catch (...) { } |
자원 할당하는것을 Try 문에 묶어서 사용을 하면 자연스레 Try가 종료되면서 close가 생긴다.
즉 catch 나 finally에서 따로 코드를 구현하지 않아도 된다.
하지만 이때 Try 에 전달할수 있는 객체는 AutoCloseable 상속되어있는 객체들 한정이다.
(참고로 BufferedReader와 InputStreamReader클래스가 추상클래스 Reader를 상속 / Reader는 Closeable 인터페이스를 상속 / Closeable 인터페이스는 AutoCloseable인터페이스 상속 하기에 가능)
Java는 AutoCloseable 인터페이스를 구현하고 있는 자원에 대해 try-with-resources를 적용 가능하도록 하였고, 이를 사용함으로써 코드가 유연해지고, 누락되는 에러없이 모든 에러를 잡을 수 있게 되었다.
Baldung 사이트에서는 아래와 같이 소개한다.
https://www.baeldung.com/java-try-with-resources
반응형
'IT > Java' 카테고리의 다른 글
DatasSource Exclude 설정 관련(DataSourceAutoConfiguration) (13) | 2024.08.10 |
---|---|
Hash 충돌의 해결 (21) | 2024.08.06 |
[ArrayList] 조건 삭제를 위한 removeIf (15) | 2024.08.02 |
[Error] incompatible types / Type mismatch (13) | 2024.08.01 |
[Error] ConcurrentModificationException (5) | 2024.07.31 |
댓글