예외처리
[토비 스프링] CH4-2. 예외 전환
예외 전환의 목적 예외 전환의 목적은 두 가지이다. 런타임 예외로 바꿈으로써 필요하지 않은 catch문을 줄여주기 위함 로우레벨 예외를 좀 더 의미 있고 추상화된 예외로 바꾸기 위함 JDBC의 한계 JDBC는 자바를 이용해 DB에 접근하는 방법을 추상화된 API 형태로 정의해놓고, 각 DB 업체가 JDBC 표준을 따라 만들어진 드라이버를 제공하게 해준다. 하지만 DB를 자유롭게 변경해서 사용할 수 있는 유연한 코드를 보장해주지는 못한다. 이유는 다음과 같다. 비표준 SQL 많은 DB가 표준을 따르지 않는 비표준 문법과 기능을 제공한다. 비표준 SQL은 DAO 코드에 들어가고, 해당 DAO는 특정 DB에 종속적인 코드가 되어 버린다. 이를 해결하기 위한 방법은 두 가지이다. 호환 가능한 표준 SQL만 사용..
[토비 스프링] CH4-1. 예외처리
초난감 예외처리 자바를 처음 배우면 예외처리를 다음과 같이 try-catch문을 써서 처리한다. try { ... } catch(SQLException e) { } 예외가 발생하는 것을 catch블록을 써서 잡아내는 것은 좋은데 아무것도 하지 않고 별문제 없는 것처럼 넘어가 버리는 건 위험한 일이다. (리소스 소진, 예상치 못한 다른 문제를 야기한다.) 다음과 같은 코드들도 잘못 된 예외 처리 방식이다. 오류 메세지는 출력해주지만, 다른 로그나 메세지에 금방 묻혀버려 놓치기 쉽다. catch(SQLException e) { System.out.println(e); } catch(SQLException e) { System.out.println(); } 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시..
[Effective Java] 명명 패턴보다 애너테이션을 사용하라
명명 패턴 특별히 다뤄야 할 프로그램 요소에는 구분되는 명명패턴을 이용했다. 예를 들어 JUnit은 테스트 메서드 이름이 test로 시작하게끔 했었다. 이런 명명 패턴은 다음과 같은 문제가 있다. 타입 세이프 하지 않다. tsetSaftey라고 적으면 JUnit은 이를 인지하지 못한다. 올바른 프로그램 요소에서만 사용된다는 보장이 없다. -> 클래스의 이름에 test를 붙여도 클래스에는 적용되지 않는다. 프로그램 요소를 매개변수로 전달할 방법이 없다. -> 예외 테스트가 힘들다. 애너테이션 @Retention가 @Target이라는 메타 어노테이션을 이용해 애너테이션의 라이프사이클을 지정하고 사용자가 올바른 프로그램 요소에 사용할 수 있도록 도와준다. 이러한 마커 애너테이션은 잘못 사용하면 컴파일 타임에 ..