티스토리 뷰
Essential Language Skill/Effective Java
Item 9. try-finally보다는 try-with-resource를 사용하라
Jordy-torvalds 2019. 12. 8. 18:49자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 대표적으로 inputStream, OutputStream, java.sql.Connection 등이 좋은 예다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어진다.
이런 자원 중 상당수가 안전망으로 finalizer를 활용하고는 있지만 finalizer는 그리 믿을만 하지 못하다.
또한 try 문을 중첩해서 사용할 경우 가독성은 급격히 내려간다.
try-with-resource 문을 사용하기 위해서는 해당 클래스가 AutoCloseable 인터페이스를 구현해야한다. 이 인터페이스는 단순히 void를 반환하는 close 메서드 하나만 덩그러니 정의한 인터페이스다.
아래는 AutoCloseable을 실제 구현한 InputStream의 일부 코드다.
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
public abstract class InputStream implements Closeable {
public void close() throws IOException {}
}
try-with-resource를 사용하고 싶다면 클래스에 AutoCloseable(Closeable)을 구현하기 바란다.
try(InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst)){
...
}catch(IOException e) {
...
}finally {
...
}
'Essential Language Skill > Effective Java' 카테고리의 다른 글
Item 11. equals를 재정의하려거든 hashcode도 재정의하라 (0) | 2019.12.08 |
---|---|
Item 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2019.12.08 |
Item 7. 다 쓴 객체 참조를 해제하라 (0) | 2019.12.08 |
Item 6. 불필요한 객체 생성을 피하라 (0) | 2019.12.08 |
Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2019.12.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Delete
- k8s
- JVM
- Effective Java
- JMM
- Java Memory Structure
- POD
- Java
- kubernetes
- Replication Controller
- 자바 메모리 구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함