Error
어떤 원인에 의해 오동작 하거나 비정상저긍로 종료되는 경우
발생 시점에 따른 구분
- 컴파일 에러 (Compile-time error) : 컴파일 도중 컴파일러가 발견하는 오류
- 런타임 에러 (runtime error) : 컴파일은 성공저그올 진행되었으나, 프로그램 실행 중에 발생하는 오류
- 논리적 에러 (logical error) : 컴파일도 되고 프로그램도 실행되었으나, 프로그램이 의도대로 동작하지 않는 오류
에러 vs 예외
- 에러(Error): 발생하면 복구할 수 없는 오류 ex) 메모리 부족, 스택 오버 플로우
- 예외(Exception): 프로그래머가 적절한 코드를 통해 대비할 수 있는 오류 ex) 클래스 형 변환 실패, 파일 읽기 실패
예외처리 (Exception Handling)
예외 발생 시 프로그램의 비정상 종료를 막고 정상적인 실행 상태를 유지하는 것
예외의 감지 및 예외 발생 시 동작할 코드를 작성하고, 사용자에게 적절한 메시지 제공
예외의 계열
RuntimeException 클래스들
- 프로그래머의 실수로 발생하는 계열
- unchecked exception
- 대처 코드가 없어도 컴파일 문제 x
Exception 클래스
- 사용자의 실수 등 외적인 요인에 의해 발생하는 계열
- checked exception
- 대처 코드가 없으면 컴파일 진행 x
예외 처리 키워드
직접 처리
- try {} : 예외가 발생하는 가능성이 있는 코드를 포함하는 블록
- catch (예외매개변수) {} : 예외가 발생했을 때 실행할 코드 블록
- finally {} : 예외 발생 여부와 상관없이 항상 실행되는 코드 블록
try {
// 예외가 발생할 수 있는 코드
} catch (SomeException e) {
// 예외가 발생했을 때 처리할 코드
} finally {
// 예외 상관없이 항상 수행해야 하는 코드
// 중간에ㅔ return이 있어도 finally 블록 수행 후 반환
}
간접 처리
- throws: 메서드 선언부에 사용되며, 메서드에서 발생 가능한 호출자에게 전달
예외를 직접 발생시킬 때
- throw: 예외를 명시적으로 발생시키는 키워드