자바의 try with resources
try with resources 란?
try with resources는 자원 반납 코드를 자동으로 실행되도록 지원해주는 문법이다.
파이썬에서는 with, C#에서는 using과 같은 유사한 문법이 존재한다.
기존 방식 (try-catch-finally)
문제점
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static void main(String args[]) {
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream("test.txt");
bis = new BufferedInputStream(is);
// 처리...
} catch(Exception e){
log.info("에러", e);
} finally {
try{
if (is != null) {
is.close();
}
if (bis != null){
bis.close();
}
} catch(Exception e) {
log.info("에러", e);
}
}
}
기존 방식에서는 null 체크, close() 등의 자원 반납 함수를 직접 호출해야했다.
이러한 방식은 자원 반납 코드를 추가해야하고, 실수로 자원을 반납하지 않거나 자원 반납 코드에서 에러 발생 시 대처가 힘든 경우 등의 문제점이 존재했다.
이러한 문제점들을 해결하기 위해 try-with-resources 문법이 등장하게 되었다.
새로운 방식 (try-with-resources)
1
2
3
4
5
6
7
8
9
10
public static void main(String args[]) {
try (FileInputStream is = new FileInputStream("test.txt");
BufferedInputStream bis = new BufferedInputStream(is)) {
// 처리...
} catch(Exception e) {
log.info("에러", e);
}
}
해당 문법을 통해 조금 더 직관적으로 파일스트림에서 발생하는 에러에 대처할 수 있는 코드를 작성할 수 있다.
구현 조건
AutoCloseable
1
2
3
4
5
6
7
public interface AutoCloseable {
void close() throws Exception;
}
AutoCloseable 인터페이스를 구현해야한다.
해당 인터페이스의 close() 메서드를 구현해주지 않으면 try-with-resources를 활용해서 자원 해제가 불가능하다.
참고
- 망나니개발자, try-with-resources란? try-with-resources 사용법 예시와 try-with-resources를 사용해야 하는 이유, https://mangkyu.tistory.com/217
- 인파, 자바 Try With Resource 예외 처리, https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC-Try-With-Resource-%EB%AC%B8%EB%B2%95
This post is licensed under CC BY 4.0 by the author.