에러와 예외
- 어떤 원인에 의해 오동작 하거나 비정상적으로 종료되는 경우
Error
- 메모리 부족, stack overflow와 같이 발생하면 복구할 수 없는 상황
- 디버깅을 통해 해결
Exception
- 읽으려는 파일이 없거나 네트워크 연결이 안되는 등 수습될 수 있는 상태
Exception Handling
- 예외 발생 시 프로그램의 비 정상 종료를 막고 정상적인 실행 상태를 유지하는 것
- 개발자 입장에서는 코드량이 증가하지만 사용자 입장에서는 신뢰성 있는 프로그램을 제공할 수 있음
예외처리 전가
void func() throws Exception { // 예외처리를 전가 => method 선언 뒤에 throws Exception종류 작성
}
예외처리 구문 Ⅰ
void func() {
try {
// 실행문1;
// 실행문2;
// 실행문3;
} catch (AException e) {
// AException 발생 시 실행할 문장;
} catch (BException e) {
// BException 발생 시 실행할 문장;
}
}
- AException과 BException이 상속 관계를 갖는다면 BException이 부모 Exception이어야 함
예외처리 구문 Ⅱ
void func() {
try {
// 문장1;
// AException 발생 가능 문장2;
// 문장3;
// BException 발생 가능 문장4;
// 문장5;
} catch (AException e) {
// 문장6;
} catch (BException e) {
// 문장7;
}
}
- 위 코드에서 Exception 여부에 관계 없이 문장 5를 반드시 실행하고 싶다면
⇒ finally 블록을 사용
void func() {
try {
// 문장1;
// AException 발생 가능 문장2;
// 문장3;
// BException 발생 가능 문장4;
// 문장5;
} catch (AException e) {
// 문장6;
} catch (BException e) {
// 문장7;
} finally {
// 문장5;
}
}
예외 클래스의 계층
Checked exception
- 예외에 대한 대처 코드가 없으면 컴파일이 진행되지 않음
- 명시적으로 발생할 수 있는 예외에 대한 처리를 강요
- 반드시 try-catch 또는 throws를 사용해야함
Unchecked exception
- 예외에 대한 대처 코드가 없더라도 컴파일은 진행됨
- 개발자실수 또는 사용자 입력데이터 예외
- RuntimeException을 상속받는 예외
- try-catch 또는 throws 사용 가능
- if문을 통해 처리 가능
try~catch 구문
try {
// 예외가 발생할 수 있는 코드
}
catch (XXException e) {
// 예외가 발생했을 때 처리할 코드
}
다중 exception handling
- try 블록에서 여러 종류의 예외가 발생할 경우
- 하나의 try 블록에서 여러 개의 catch 블록 추가 가능
- 예외 종류별로 catch 블록 구성
- 하나의 try 블록에서 여러 개의 catch 블록 추가 가능
- 유의 사항
- JVM이 던진 예외는 catch 문장을 찾을 때 다형성이 적용 됨
- 상위 타입의 예외가 먼저 선언되는 경우 뒤에 등장하는 catch 블록은 동작할 기회가 없음
- 상속 관계에서는 작은 범위에서 큰 범위 순으로 정의
다중 예외 처리를 이용한 Checked Exeption 처리
- 처리하지 않으면 컴파일 불가
- 예외 처리는 가능한 구체적으로 진행
- 예외 상황 별 처리가 쉽지 않음
- 가급적 예외 상황 별로 처리하는 것을 권장
try~catch~finally 구문을 이용한 예외 처리
- Finally는 예외 발생 여부와 상관 없이 언제나 실행
- 중간에 return을 만나는 경우도 finally 블록을 먼저 수행 후 리턴 실행
- 주요 목적 : try 블록에서 사용한 리소스 반납
- finally 블록에서 close 메서드가 IOException을 유발 가능단, AutoClosable interface가 구현된 객체들에 한해서 처리
- ⇒ JDK 1.7 이상에서 리소스 자동 close 처리
Exception 클래스
- class 클래스이름 extends Exception {} ⇒ Exception 클래스를 상속받으면 Exception 클래스가 됨
기본 예외 상황 처리기
- 프로그램 ⇒ 실행 ⇒ 예외발생!
- JVM이 예외 발생 시 관련된 예외 클래스로부터 예외 객체 생성
- 프로그램에서 지정된 예외 처리루틴에게 넘겨줌
사용자 정의 예외
- 사용자 프로그램에서 인위적으로 예외를 발생시킬 수 있음
- throw 예외객체;
- throw new 예외객체타입(매개변수);
'정리 > Java' 카테고리의 다른 글
Collection (0) | 2023.03.08 |
---|---|
Generics (0) | 2023.03.08 |
다형성 / 추상클래스 / 인터페이스 (0) | 2023.03.08 |
싱글톤(Singleton) 디자인 패턴 (0) | 2023.03.08 |
메서드 오버라이딩 (0) | 2023.03.08 |