에러 (Error)
하드웨어의 잘못된 동작 또는 고장으로 인한 오류 , 에러가 발생되면 프로그램 종료, 정상 실행 상태로 돌아갈 수 없다.
예외 (Exception)
사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오휴, 예외가 발생되면 프로그램 종료, 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있다.
일반(컴파일 체크) 예외(Exception)
예외 처리 코드 없으면 컴파일 오류 발생
실행 예외(RuntimeException)
예외 처리 코드를 생략하더라도 컴파일이 되는 예외, 경험 따라 예외 처리 코드 작성이 필요하다.
타입 변환이 되지 않을 경우 발생
예외 발생시 프로그램 종료를 막고, 정상 실행 유지할 수 있도록 처리해주는 코드
• 일반 예외: 반드시 작성해야 컴파일 가능
• 실행 예외: 컴파일러가 체크해주지 않으며 개발자 경험 의해 작성
예외 별로 예외 처리 코드 다르게 구현한다.
자바 7부터는 하나의 catch 블록에서 여러 개의 예외 처리가 가능해졌다.
• 동일하게 처리하고 싶은 예외를 | 로 연결
(현재에서의 리소스는 일단 데이터를 읽고 쓰는 객체라고 생각하자)
try-with-resources를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드를 호출하여 안전하게 리소스를 닫아준다. 그때 리소스를 자동으로 닫아주는 것이 try-with-resources이다.
//상세 코드 생략
//try-with-resources를 사용 안하였을 때
FileInputsStream fis = null;
try {}
catch {}
finally {
fis.close();
}
//try-with-resources를 사용 하였을 때
try(FileInputsStream fis = new FileInputsStream("file.txt")) {}
사용자 정의 예외 클래스 선언 : 자바 표준 API에서 제공하지 않는 예외
애플리케이션 서비스와 관련된 예외
• Ex) 잔고 부족 예외, 계좌 이체 실패 예외, 회원 가입 실패 예외....
호출된 곳에서 발생한 예외를 처리하도록 한다.
getMessage() : 예외 발생시킬 때 생성자 매개값으로 사용한 메시지를 리턴한다. 원인을 세분화하기 위해 예외 코드 포함(예: 데이터베이스 예외 코드)
catch() 절에서 활용
예외 발생 코드 추적한 내용을 모두 콘솔에 출력한다. 프로그램 테스트하면서 오류 찾을 때 유용하게 활용한다.