예외(Exception)
정말정말 중요하지만 귀찮은것이 예외 처리다. 많은 개발자들이 예외 처리를 제대로 하고있지 않지만, 예외 처리는 언제 어디서나 중요하다.
잘못된 예외 처리 때문에 버그를 찾을 수 없을 수도 있고, 상상도 못할 만큼 큰 오류를 낳을 수도 있다.
잘못된 예외 처리
예외를 잡고 아무것도 하지 않는 처리
1 2 3 4 5 6 | try { ... } catch(SQLException e) { } | cs |
예외 발생을 무시한채, 정상적인 상황인 마냥 넘어갈 의도가 아니라면 절대 절대 하지 말아야한다. 예외가 발생했는지도 모르기때문이다.
결국, 모른채로 넘어간 예외들로 인해서 어떤 기능이 비정상적인 작동을 하거나, 메모리 혹은 리소스가 소진된다.
콘솔에만 출력하는 처리
1 2 3 4 5 6 7 | try { ... } catch(SQLException e) { System.out.println(e); e.printStackTrace(); } | cs |
솔직히, 나도 이렇게 예외를 처리한 경험이 많다. 이런 처리는 개발중에는 개발자가 콘솔을 유심히 보고있기 때문에 금방 예외를 알아채고 조치를 취할 수 있으나, 다른 로그나 메시지에 파묻히면 그마저도 알 수 없다. 그렇기 때문에 실제 운영 서버에 이런 상태로 올라갈 경우 심.각.한 문제가 발생한다.
그나마 나은 처리
1 2 3 4 5 6 7 | try { ... } catch(SQLException e) { e.printStackTrace(); System.exit(1); } | cs |
위 두 개의 예외 처리보단 이 방식이 훨씬 낫다. 예외가 발생하면, 예외에 대한 로그를 찍고 종료된다. 그렇기때문에, 예외가 발생했음을 확실하게 알 수 있다. 그러나, 실제 운영 서버에서 이렇게 종료시켜버리면 이또한 심각한 문제겠지.
throws
1 2 3 | public void method() throws Exception { ... } | cs |
이런건 어떤가? try-catch문 없이 throws Exception 하나로 모든 예외를 처리할 수 있다. 간편하다!
하지만 이런 방식도 지양해야하는 방식이다. 어떤 예외인지, 어떻게 처리할지도 명시하지 않았기 때문에 무책임, 무의미한 처리이다.
결코 이 코드는 예외를 제대로 핸들링한 코드가 아니다.
반응형
'☕️ JAVA' 카테고리의 다른 글
Spring AOP와 AspectJ 비교하기 (14) | 2019.12.15 |
---|---|
이미지를 BLOB 형태로 DB에 저장하기 (5) | 2018.09.09 |
웹 서버와 웹 어플리케이션 서버의 차이 (1) | 2017.12.22 |
[이펙티브자바] 규칙05 : 불필요한 객체는 만들지 말라 (0) | 2017.10.10 |
[이펙티브자바] 규칙02 : 생성자 인자가 많을 때는 Builder 패턴을 고려하라 (0) | 2017.10.07 |