- 빠른 실패
- if문 사용시 빠른실패를 통한 코드의 가독성을 높이자.
- Depth를 줄일 수 있다.
- 모든 검증 조건을 다시 상기 할 필요가 없어진다.
- 항상 가장 구체적인 예외 잡기
- 예외처리시 일반적인 타입을 잡으면 잡아선 안될 오류까지 잡힐 위험이 있다.
- try-catch 사용
- ex) Exception 대신 가장 구체적인 예외를 잡는다.
- 가장 구체적인 예외를 잡기 위해 여러 예외를 잡아야 할 수도 있다.
- catch 블록을 하나가 아닌 여러개 작성하여 코드는 길지만, 버그가 많은 짧은 코드보다 좋다.
- 메시지로 원인 설명
- 메시지 작성시 자세한 정보로 예외의 근본적인 원인을 빠르게 추적 가능하다.
- 원인 사슬 깨지 않기
- 변수로 원인 노출
- 예외는 단순한 클래스가 아니라 필드, 메서드, 생성자를 가질 수 있느 클래스이다.
- 예외의 중복시 맞춤형 예외클래스(Util)를 만들어 사용하자.
- 타입 변환 전에 항상 타입 검증하기
- 런타임에 동적 객체 타입을 처리해야 할 경우 타입변경(class) 시 다른 객체가 삽입될 경우 ClassCastException을 일으킨다.
- 변환 전 타입 검증을 하자
- 결과를 지역 변수(example)에 저장한다.
-> Object example = 메서드 결과 저장 - instanceof 연산자로 타입을 검증한다.
-> if(example instanceof 클래스타입) - 참일 경우만 if문이 실행되기에 ClassCastException이 발생하지 않는다.
- 결과를 지역 변수(example)에 저장한다.
- 항상 자원 닫기
- 프로그램이 종료될때까지 해제되지 않는 현상을 '자원 누출' 이라 한다.
- close 사용시 예외가 발생할 상황도 예측하여 try-catch-finally 사용으로 예외 발생 후 에도 종료되도로 사용하자.
- 항상 다수 자원 닫기
- 자원을 직접 관리하기 보다, try-with-resources 사용하자.
- 빈 catch블록 설명하기
- 예외처리의 여러가지 방식중 빈 catch 블록을 보면, 누구나 잘못되었다 생각할 것이다.
- 해결방법으로는 변수명을 구체적으로 명시해주고, 주석을 통한 설명을 작성하자.