프로그램에서의 오류
① 컴파일 오류 (Compile error)
- 프로그램 코드 작성 중 발생하는 문법적 오류
② 실행 오류 (Runtime error)
- 실행 중인 프로그램이 의도하지 않은 bug를 만나거나, 프로그램이 중지되는 오류
- 비정상 종료를 일으켜 시스템의 심각한 장애를 유발할 수 있음
오류와 예외
① 시스템 오류 (Error)
- 프로그래머가 처리할 수 없는, 시스템 레벨에서 발생하는 심각한 문제
- 대부분 JVM이나 하드웨어에서 발생함
ex) 동적 메모리가 없는 경우, 스택 메모리 오버 플로우 등
② 예외 (Exception)
- 프로그램에서 제어할 수 있는 오류
- 언어의 안전성을 위해, 문법적으로 '예외 처리'가 필요함
ex) 읽으려는 파일이 존재하지 않는 경우, 네트워크/DB 연결이 되지 않는 경우 등
예외 클래스
- 자바에서는 대부분의 예외에 대한 클래스들이 만들어져 있음
- 모든 예외 클래스의 최상위 클래스 : Exception
- Arithmetic Exception : 정수를 0으로 나눈 경우 발생
- NullPointerException : 초기화되지 않은 Object를 사용하는 경우 발생
- ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우 발생
- FileNotFoundException : 참조하는 파일이 지정된 위치에 존재하지 않는 경우 발생
예외 처리의 중요성
- 프로그램의 비정상적인 종료를 방지해서, 시스템이 원활하게 실행되도록 함
- 실행 오류가 발생한 경우 오류의 과정을 재현하기 어려움
- 오류가 발생했을 때의 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요함
예외 처리
# try-catch 문
try {
// 예외가 발생할 수 있는 코드 부분
} catch(예외타입 e) {
// try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
}
// 다중 catch 블록 가능 (else if처럼)
- catch 문은 중복으로 작성할 수 있음 (else if 문처럼)
- 예외 이름은 console에서 확인할 수 있음
→ 확인하기 어렵다면 catch 문의 매개변수를 'Exception' 클래스로 받으면 됨
# try-catch-finally 문
try {
// 예외가 발생할 수 있는 코드 부분
} catch(예외타입 e) {
// try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
// 오류에 대한 정보를 알고 싶은 경우
e. printStackTrace();
} finally {
// 반드시 수행되는 코드 부분
// 실행을 종료시키는 return 키워드를 만나더라도 수행됨
}
- finally 문은 자원 해제 용도로 사용할 수 있음
ex) scanner.close();
# throws 키워드
// 메서드로 선언
public 반환자료형 메서드명(매개변수) throws 예외타입 {
// 예외가 발생할 수 있는 코드 부분
}
// try-catch 문에서 try 블록에 메서드를 호출함
- 오류가 발생할 수 있음을 제시하고, 예외 처리 흐름은 사용자가 알아서 구현하도록 함
기타 메모
- 오류 코드처럼 빨간 색으로 출력 : System.err.println("메세지");
'Java > Base' 카테고리의 다른 글
[Java] 제네릭 (Generic) (0) | 2023.02.17 |
---|---|
[Java] 내부 클래스와 익명 클래스 (1) | 2023.02.16 |
[Java] Object 클래스 (0) | 2023.02.14 |
[Java] 인터페이스 - DAO 구현 (0) | 2023.02.13 |
[Java] 인터페이스와 default 메서드 (0) | 2023.02.13 |