프로그램 오류의 종류
- 컴파일 에러 : 컴파일할 때 발생하는 에러
- 런타임 에러 : 실행할 때 발생하는 에러
- 논리적 에러 : 사용자의 작성 의도와는 다른 동작 수행
Java의 런타임 에러 - 에러(Error)와 예외(Exception)
- 에러(Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외(Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리의 정의와 목적
- 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성
- 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
예외 클래스의 계층구조
- RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 에러
- Exception 클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

예외처리구문-try-catch
- 예외를 처리하려면 try-catch문을 사용해야 함

* try-catch문은 괄호 생략 불가
try 블럭 내에서 예외가 발생하지 않은 경우
- catch 블럭을 거치지 않고 전체 try-catch문을 빠져나간 후 수행을 계속함
try 블럭 내에서 예외가 발생한 경우
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인
2. 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행 만일 일치하는 catch블럭을 찾지 못하면 예외는 처리되지 못함
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(0/4);
System.out.println(4);
} catch (Exception e) {
System.out.println(5);
}
System.out.println(6);
// 실행결과
// 1
// 2
// 3
// 5
// 6
- try블럭에서 예외가 발생하면, 발생한 예외를 처리할 catch블럭을 검색
- 첫 번째 catch블럭부터 순서대로 찾아 내려가며, 일치하는 catch블럭이 없으면 예외는 처리되지 않음
- 예외의 최고 조상인 Exception을 처리하는 catch블럭은 모든 종류의 예외가능(반드시 마지막 catch블럭이어야 함)
예외 객체에 대한 메서드
- 발생한 예외 객체를 catch블럭의 참조변수로 접근할 수 있음
- printStackTrace() : 예외가 발생할 때 호출스택(Call Stack)에 있었던 예외 메시지와 메서드의 정보를 화면에 출력
- getMessage() : 예외 클래스의 인스턴스에 저장된 메시지를 획득
finally 블럭
- 예외의 발생여부와 관계없이 실행되어야 하는 코드를 넣음
- 선택적으로 사용할 수 있으며, try-catch-finally의 순서로 구성됨
- 예외 발생시, try -> catch -> finally의 순서로 실행되고 예외 미발생시, try -> finally의 순서로 실행됨
- try 또는 catch 블록에서 return문을 만나도 finally 블럭은 수행됨
예외 발생시키기
1. 예외 클래스의 객체를 생성
- Exception e = new Execption("예외 발생");
2. 키워드 throw를 이용해서 예외를 발생시키
- throw e;
메서드에 예외 선언하기
- 예외를 처리하는 방법
-> 직접 처리 : try-catch 문으로 예외 처리
-> 간접 처리 : 에외 선언 (예외 전달)
- 메서드를 호출할 때 예외를 처리하는 것이 아니라, 호출한 메서드로 전달해주는 것
- 호출한 메서드에서 예외처리를 해야만 할 때 사용
void method() throws Exception1, Exception2, Exception3 {
/* 구현 생략 */
}
향상된 예외처리(try-with-resources)
- try() 코드 블록이 끝난 이후 자동으로 자원을 해제해주는 기능
-> finally 블록이나 모든 catch 부분에 자원 해제를 처리해주지 않아 편리함
- 사용한 자원을 정상적으로 해제해주지 않고 사용하게 된다면?
-> 메모리 부족으로(Leak) 프로그램이 멈추게 됨
-> 자원을 사용한 뒤에는 반드시 해제를 해주어야 함
'Java' 카테고리의 다른 글
| 불편해서 직접만든 CapsLock 표시 (1) | 2023.12.23 |
|---|---|
| 쓰레드 (0) | 2022.12.06 |
| 제네릭스 (0) | 2022.11.25 |