2005년 05월 29일
Java 리소스 닫기(Resource Close)를 제대로 하려면..
요즘 보고 있는 책 Core EJB 책을 보다보니 Stream 을 닫는 부분이 잘못 나와있다.
(뭐, 이거 빼고는 아직은 읽기에 부담스럽지 않고 만족스럽다..)
어찌 했냐면,
try {
...
} catch(..) {
...
} finally {
if (writer != null) writer.close();
if (reader != null) reader.close();
if (socket != null) socket.close();
}
위와 같이 했는데, 이렇게 하면 안된다.
위와 같이하면 첫번째 writer.close() 에서 예외가 발생하면 그 이후의 다른 close() 문들은 전혀 실행되지 않고 빠져나가 버려 리소스 누수가 발생하게 된다.
이것은 스트림이나 소켓 뿐만 아니라 JDBC Connection 에서도 마찬가지 이다.
그러므로 다음과 같이 바꿔야만 쓰겠다.
try {
...
} catch(..) {
...
} finally {
if (writer != null) {
try { writer.close(); } catch (Exception ex) {}
}
if (reader != null) {
try { reader.close(); } catch (Exception ex) {}
}
if (socket != null) {
try { socket.close(); } catch (Exception ex) {}
}
}
if / for / while 문 등은 비록 실행할 문장이 한 개 뿐이라도 괄호를 치는 것을 원칙으로 한다.
그리고 일일이 귀찮더라도 다 try/catch 안에 .close() 문을 넣어야 안전하게 리소스를 닫는 것이 된다.
Jakarta Commons DBUtils에는 저런 귀찮은 try/catch 없이 메소드 하나 호출로 JDBC 리소스를 닫아주는 메소드가 있다.
DbUtils.closeQuietly()를 한번 사용해 보시라.
(뭐, 이거 빼고는 아직은 읽기에 부담스럽지 않고 만족스럽다..)
어찌 했냐면,
try {
...
} catch(..) {
...
} finally {
if (writer != null) writer.close();
if (reader != null) reader.close();
if (socket != null) socket.close();
}
위와 같이 했는데, 이렇게 하면 안된다.
위와 같이하면 첫번째 writer.close() 에서 예외가 발생하면 그 이후의 다른 close() 문들은 전혀 실행되지 않고 빠져나가 버려 리소스 누수가 발생하게 된다.
이것은 스트림이나 소켓 뿐만 아니라 JDBC Connection 에서도 마찬가지 이다.
그러므로 다음과 같이 바꿔야만 쓰겠다.
try {
...
} catch(..) {
...
} finally {
if (writer != null) {
try { writer.close(); } catch (Exception ex) {}
}
if (reader != null) {
try { reader.close(); } catch (Exception ex) {}
}
if (socket != null) {
try { socket.close(); } catch (Exception ex) {}
}
}
if / for / while 문 등은 비록 실행할 문장이 한 개 뿐이라도 괄호를 치는 것을 원칙으로 한다.
그리고 일일이 귀찮더라도 다 try/catch 안에 .close() 문을 넣어야 안전하게 리소스를 닫는 것이 된다.
Jakarta Commons DBUtils에는 저런 귀찮은 try/catch 없이 메소드 하나 호출로 JDBC 리소스를 닫아주는 메소드가 있다.
DbUtils.closeQuietly()를 한번 사용해 보시라.
# by | 2005/05/29 23:10 | 프로그래밍 | 트랙백(2) | 덧글(2)







☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : [그리고]Java 리소스 닫기(Resource Cl..
TONG하고 통했네요!!...more
제목 : 리소스 잡기
<FONT ...more
JDBC관련 코딩 속도와 코딩량이 압도적으로 줄어들었습니다~~