Java 언어에서는 예외처리를 위해서 Exception이라는 클래스를 이용해서 throw 및 catch를 하게 됩니다.
많은 Software Engineer (SE) 들은 여러 가지 경우의 예외를 처리하기 위해서, 일반적으로 Exception으로부터 상속된 새로운 Exception을 만들어 사용하거나, Sun에서 배포되는 Java Development Toolkit에 포함되어 있는 다양한 Exception들을 사용하게 됩니다.
하지만, 실제 프로젝트를 수행하다 보면, SE가 의도한 Exception 에 대해서만 catch를 수행하고 가장 기본적인 Exception에 대한 처리는 누락하는 경우가 많습니다. 가장 흔하게 볼 수 있는 경우가 NullPointerException의 경우입니다.
예를 들어보면, DB SQL 관련 처리를 할 경우 아래와 같은 코드가 있다고 가정해 봅니다 (완전한 코드가 아니고 설명을 위한 예시입니다).
// ----------------------------------------------------
try {
String sql_cnt = "SELECT count(*) FROM table_a ";
PreparedStatement pstmt = conn.prepareStatement(sql_cnt);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
int cnt = rs.getInt(1);
} else
{
System.out.println("no data");
}
rs.close();
pstmt.close();
} catch (SQLException sqlex) {
// sqlexception에 대한 처리....
}
// ----------------------------------------------------
위와 같은 코드에서 별 문제가 없다면, 아주 잘 돌아가는 코드일 것입니다. 하지만, 실제 run-time 에서는 예상하지 못하는 경우가 종종 발생하게 마련입니다. 위의 코드 중에서
(1) conn.prepareStatement(sql_cnt)
(2) rs.next()
(3) pstmt.executeQuery()
와 같은 코드에 대한 처리를 완벽하게 했다고 말하기는 어렵습니다. 그 이유는 conn, rs, pstmt는 언제든지 null이 될 가능성이 있다고 할 수 있기 때문입니다. 물론 너무 비약하는 것이라고 말할 수도 있지만, 예를 드는 것이라는 점을 감안해야 합니다.
이런 가정 하에서의 모든 예외를 극복하기 위해서는 기본 클래스인 Exception에 대한 catch도 반드시 추가하여 최소한의 NullPointerException에 대한 처리를 추가해 주어야 한다고 생각합니다.
....
} catch (SQLException sqlex) {// sqlexception에 대한 처리....
} catch (Exception ex) {
// 예외 처리...
}
필자는 요즘도 너무나 많은 NullPointerException들과 싸우고 있으며, 이런 잔잔한 오류들은 전체 시스템을 알 수 없는 불안정으로 몰아가기도 합니다.
'Robust Computing' 카테고리의 다른 글
| 프로그래밍에서 Naming Rule 에 대하여 (0) | 2008/03/12 |
|---|---|
| 칼퇴근 합시다. (0) | 2008/03/11 |
| NullPointerException를 완전히 제거합시다. (0) | 2008/03/05 |
| 파일 확장자 모음 (File Extension list) (0) | 2008/03/04 |
| Robust Programming에서 안정성과 성능 (0) | 2008/02/28 |
| Robust Programming의 Code Sampling (0) | 2008/02/25 |



