-
JAVA | try-with-resource, 자원을 자동으로 해제▼ Backend/자바 (JAVA) 2021. 12. 13. 17:05반응형
기존의 자원 해제 방법 try - finally
지금까지 개발을 해오면서 파일 관련 처리를 할 때면 자원 관련 객체인 InputStream, OutputStream을 사용하다 보니(꼭 파일 관련 처리가 아니더라도) 그럴 때마다 사용했던 자원에 대한 close() 처리를 finally 에서 해주고 있었다. 큰 문제는 없었지만 클린 코드, 리팩터링 관련해서 공부하다 보니 finally에서 자원을 해제하지 않고도 자원을 해제할 수 있는 방법이 있었다.
try - finally
BufferedInputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream(inputStream); try { out = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[4096]; int byteRead = 0; while ((byteRead = in.read(buffer)) >= 0) { out.write(buffer, 0, byteRead); } } finally { out.close(); } } finally { in.close(); }
Java7 에서 부터 추가된 try-with-resource 방법
- try () 소괄호에서 자원을 할당받는 단계를 진행한다.
- 이 구조를 사용하려면 해당 자원이 AutoCloseable 인터페이스를 구현해야 한다.
try (BufferedInputStream in = new BufferedInputStream(inputStream); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream())) { byte[] buffer = new byte[4096]; int byteRead = 0; while ((byteRead = in.read(buffer)) >= 0) { out.write(buffer, 0, byteRead); } }
AutoCloseable
실제로 AutoCloseable 인터페이스를 직접 확인해 보기 위해서 Stream 객체를 계속 따라가 보았더니 아래 내용을 확인할 수 있었다.
Reference
반응형'▼ Backend > 자바 (JAVA)' 카테고리의 다른 글
JAVA | 압축(zip)파일 해제하기 (0) 2022.06.07 JAVA | 파일 압축(zip) 하기 (0) 2022.06.07 JAVA | JVM(Java Virtual Machine) 이란 (0) 2021.12.10 JAVA | 파일 다운로드 구현하기 (0) 2021.09.30 JAVA | 파일 업로드 구현하기 (0) 2021.09.29