프로그램 실행중 어떤 원인에 의해 오작동 하거나 비정상적으로 종료되는 경우
발생 시점에 따라 컴파일에러, 런타임에러로 나눌 수 있다
컴파일 시점에 발생하는 에러이며 컴파일러가 에러를 캐치하여 프로그램이 실행되지 않는다
1. 문법오류
2. 타입오류
3. Missiong Return Statement
등등..
프로그램 실행중 발생하는 에러로 런타임 에러는 코드가 실행되기 전에는 예측할 수 없는 상황에서 발생할 수 있기 때문에, 일반적으로 컴파일러가 이 오류를 잡을 수 없다
1. NullPointerExcetion
2. ArrayIndexOutOfBoundsException
3. ArithmeticException
등등..
자바에서의 에러(Error)는 프로그램 실행 중에 발생하는 심각한 문제로, 일반적으로 예외(Exception)와는 다른 개념
에러는 보통 애플리케이션에서 처리할 수 없으며, 주로 시스템의 자원 부족이나 심각한 환경적 문제로 인해 발생
프로그램 실행 중에 발생하는 이벤트이면서 프로그램 로직의 정상적인 흐름을 방해하는 오류를 말한다. 프로그래머가 적절하게 처리가능하고 비정상 종료 하지 않고 실행 가능


우리가 알아볼 것은 예외이다
Exception을 상속받는 클래스들은 두 부류로 나눌 수 있다
프로그램 실행시 발생할 수 있는 예기치 못한 예외에 대비한 코드를 작성하는것
비정상적이 종료를 막고 정상 실행을 유지해준다
비정상적 종료를 하게되고 처리되지 못한 예외는 JVM의 예외처리기(UncaughtExceptionHandler)가 받아서 예외의 원인을 출력한다
예외처리를 하기 위해서 try-catch 구문을 사용해야 한다
구문 예시
try{
//예외가 발생할 수 있는 로직 작성
} catch (RuntimeException e) {
//예외 발생시 처리할 로직 작성
} catch (Exception e) {
//예외 발생시 처리할 로직 작성
}
예외 발생시
1. 발생된 예외와 일치하는 catch블럭 내 문장 수행
2. 일치하는 블럭이 없다면 예외처리 실패
예외 발생 안했을 시
1. try-catch블럭 빠져나가 수행 계속 함
(모든 예외 클래스들은 Exception 클래스의 자손이므로 catch 블럭에 Exception 클래스 타입의 참조변수를 선언해 놓으면 어떤 종류의 예외가 발생해도 catch블럭에 의해 처리된다 )
예외 발생 시 호출스택에 있던 메서드의 정보와 예외 메세지를 화면에 출력한다
... catch(Exception e){ e.printStackTrace(); }
발생한 예외 클래스의 인스턴스에 저장된 메세지를 얻는다
catch(Exception e){ String msg = e.getMessage(); }
키워드 throws 를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다
- 연산자 new를 이용해 발생시키려는 예외클래스의 객체를 만든다
Exception e = new Exception("메세지 등록");
- 키워드 throw를 이용해 예외를 발생시킨다
throw e;
예외를 발생시킬 때 throw new Exception(); 만 있으면 컴파일이 되지 않는다
예외처리가 되어야 할 부분에서 예외처리가 되어 있지 않다는 에러다
그래서 try-catch문으로 감싸줘야한다
throw new RuntimeException(); 만 작성하는 것은 위와같은 에러를 발생시키지 않는다.
왜냐하면 RuntimeException의 하위 클래스들은 프로그래머의 실수로 발생하는 것들이기 때문에 예외처리를 강제하지 않는다
예외는 두 종류로 나뉜다
1. CheckedException
2. UnCheckedException

아까 위에서 Exception은 두종류로 나눌 수 있다고 했다
위에와 똑같다

가장 큰 차이점이라 한다면 반드시 예외처리를 해야되는가? 이다
체크하는 시점이 컴파일 시점이기 때문에 예외처리를 하지 않으면 컴파일 되지 않는다
명시적인 예외처리를 하지 않아도 된다.
프로그래머가 충분히 회피할 수 있는 예외이기 때문에 자바 컴파일러는 별도의 처리를 하지 않는다