▼ Backend/자바 (JAVA)
JAVA | try-with-resource, 자원을 자동으로 해제
Valar
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
반응형