일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 알고리즘
- 이펙티브자바
- 다이나믹프로그래밍
- Database
- mariaDB
- DFS
- Effective Java
- 피보나치
- Greedy
- 코테
- 탐욕법
- 프로그래머스
- BFS
- 데이터베이스
- 백준
- mybatis
- IntelliJ
- select
- db
- join
- 깊이우선탐색
- DP
- Spring
- 너비우선탐색
- java
- 그리디알고리즘
- springboot
- SQL
- 정렬
- 우선순위큐
Archives
- Today
- Total
땀두 블로그
[도서] Effective Java - Item 9. try-finally보다는 try-with-resource를 사용하라. 본문
이펙티브 자바 3판을 읽으면서 내용을 정리하는 포스트입니다. 혹시 틀린 부분이나 잘 못 설명한 부분이 있으면 댓글로 남겨주시면 수정하도록 하겠습니다.
Item 9. try-finally보다는 try-with-resource를 사용하라.
자바에서는 close() 메소드를 직접 호출해서 닫아줘야 하는 자원들이 많다. 이를 제대로 해주지 않으면 성능 문제로 이어질 수 있다. 보통은 자원이 제대로 닫힘을 보장하는 수단으로 try-finally
구문을 많이 사용했는데, 자원을 여러 개 사용하게 되는 경우에 하나의 예외 때문에 다른 예외 정보를 찾을 수 없게 되는 문제가 생길 수 있다.
이러한 문제를 해결하기 위해 자바 7버전에서는 try-with-resources
구문을 만들었다. 이는 AutoCloseable 인터페이스
를 구현해야 하고 예시는 아래와 같다.
- try-finally 구문을 사용한 예시
static String firstLineOfFile(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
static void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dst);
try {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
} finally {
in.close();
}
}
- try-with-resources를 이용한 예시
static String firstLineOfFile(String path) throws Exception {
try (BufferedReader br = new BufferedReader (
new FileReader(path))) {
return br.readLine();
}
}
static void copy(String src, String det) throws IOException {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst)) {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n == in.read(buf)) > = 0)
out.write(buf, 0, n);
}
try-with-resources
구문이 try-finally
구문에 비해 짧고, 가독성이 좋으며, 문제 진단에 있어 훨씬 좋다.
또한 자원이 여러 개 있는 경우 스택 추적 내역에 숨겨져있다가 출력되기 때문에 숨겨지는 예외 없이 진단이 가능하고, Throwable
에 getSuppressed
메소드를 통해 프로그램 코드에서 가져올 수 있다.
'도서' 카테고리의 다른 글
[도서] Effective Java - Item 11. equals를 재정의 하려거든 hashCode도 재정의하라 (0) | 2022.04.26 |
---|---|
[도서] Effective Java - Item 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2022.04.26 |
[도서] Effective Java - Item 8. finalizer와 cleaner 사용을 피하라 (0) | 2022.04.16 |
[도서] Effective Java - Item 7. 다 쓴 객체 참조를 해제하라. (0) | 2022.04.16 |
[도서] Effective Java - Item 6. 불필요한 객체 생성을 피하라. (0) | 2022.04.16 |
Comments