📌프로그램 오류 (== 에러)
- 프로그램 수행시 치명적 상황이 발생하여 비정상 종료상황이 발생한것
- 오류의 종류
- 컴파일 에러
프로그램의 실행을 막는 소스 상의 문법 에러
소스 구문을 수정하여 해결
- 런타임 에러 (예외)
입력값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등
주로 if문 사용으로 에러 처리
- 시스템 에러 (예외)
컴퓨터 오작동으로 인한 에러
소스 구문으로 해결 불가
- 논리 에러 (예외)
문법적으로 문제없고 실행했을때도 문제없지만 프로그램 의도에 맞지 않는 것
- 오류 해결 방법
- 소스 수정으로 해결 가능한 에러를 예외(Exception)라고 하는데
이러한 예외상황(예측 가능한 에러) 구문을 처리하는 방법인 예외처리를 통해 해결
📌예외 클래스 계층 구조
- Exception과 Error 클래스 모두 Object 클래스의 자손이며 모든 예외의 최고 조상은 Exception 클래스
반드시 예외처리 해야하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨

| 예외클래스 | 예외발생시점 | 예외처리 |
---|
UnChecked Exception | RuntimeException관련 | 런타임에러 (프로그램실행시) | 세모 (개발자가 원하는대로 처리 => 조건문/예외처리) |
Checked Exception | RuntimeException 외 | 컴파일에러 (빨간줄) | 필수 (조건문 기술 못함 => 예외처리로만 해결) |
📌Unchecked Exception 예외처리
- RuntimeException 클래스
- 예외 처리보다는 코드를 수정해야 하는 경우가 많음
- RuntimeException 후손 클래스
- IndexOutOfBoundsException
부적절한 인덱스 제시시 발생되는 예외
- ArithmeticException
0으로 나누는 경우 발생되는 예외
- NullPointerException
Null인 참조 변수로 객체 멤버 참조 시도 시 발생되는 예외
- NegativeArraySizeException
배열 크기를 음수로 지정한 경우 발생되는 예외
- ArrayIndexOutOfBoundsException
배열의 index범위를 넘어서 참조하는 경우 발생되는 예외
- ClassCastException
cast연산자 사용시 타입 오류가 발생되는 예외
- Exception 확인하기
- Java API Document에서 해당 클래스에 대한 생성자나 메소드를 검색하면
그 메소드가 어떤 Exception을 발생시킬 가능성이 있는지 확인 가능
해당 메소드를 사용하려면 반드시 뒤에 명시된 예외 클래스를 처리해야 함
📌Checked Exception 예외처리
- 조건문 제시불가(예측 불가)하므로 예외처리구문 필수
- 외부매개체와 입출력이 일어날 때 발생 (IOException)
📌예외처리 목적
- 예외가 발생되어서 프로그램이 비정상적으로 종료되는것을 막기 위함
📌예외처리 방법
1. Exception 처리를 호출한 메소드에게 위임
- 메소드 선언 시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임
계속 위임하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료
- throws로 예외 던지기
package 선언부
Class 작성부
public void method throws IOException{
}
2. Exception이 발생한 곳에서 직접 처리
- try~catch문을 이용하여 예외처리
- try
exception 발생할 가능성이 있는 코드를 안에 기술
- catch
try 구문에서 exception 발생 시 해당하는 exceptio에 대한 처리 기술
여러 개의 exception처리가 가능하나 exception간의 상속 관계 고려
- finally
exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술
중간에 return문을 만나도 finally구문은 실행되지만
System.exit();를 만나면 무조건 프로그램 종료
- 주로 java.io나 java.sql 패키지의 메소드 처리 시 이용
- try~catch로 예외 잡기
발생된예외클래스
는 다형성 적용하여 RuntimeException으로 받을 수 있음
단, 부모 예외 클래스보다 자식 예외 클래스를 먼저 기술해야함 (Unreachable catch block)
package 선언부
Class 작성부
method 작성부
try {
예외가 발생될 수 있는 구문;
} catch(발생될예외클래스 매개변수) {
해당 예외가 발생됐을경우 실행할 구문;
}
- try~with~resource
자바7에서 추가된 기능으로 finally에서 작성했던 close 처리를 try문에서 자동 close 처리
📌printStackTrace() 메소드
catch구문의 매개변수
.printStackTrace();
발생된 예외의 이력을 보여주는 메소드