팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에
처음 공부하시는 분들에게는 적절하지 않을 수 있습니다.
✶ 예외처리 TIP
*Error vs Exception
- 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
→ 컴파일 에러, 런타임 에러, 논리적 에러
- 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
*RuntimeException 클래스 및 서브 클래스들
프로로그래머의 실수로 발생하는 예외
*예외처리의 목적
의도하지 않은 실행 및 비정상 종료를 막고 정상적인 실행 상태를 유지하는 것
*예외처리 구문 : try-catch 구문
try {
} catch (Exception1 e1) {
e1.printStackTrace();
} catch (Exception2 e2) {
e2.printStackTrace();
} finally {
}
→ 단, 1개의 catch 블럭만 수행하며 그 뒤의 블럭은 확인되지 않는다.
→ instanceof 연산자를 이용하여 예외와 일치하는 catch 블럭을 만날 때까지 검사를 진행하고 없다면 예외는 처리되지 못한다.
→ 문장이 하나뿐이어도 괄호는 생략할 수 없다.
*catch 블럭 괄호()에 Exception class 타입의 참조변수를 선언해 놓으면 모든 예외를 처리할 수 있다.
*Error message
1) printStackTrace() : 호출 스택에 있던 메서드의 정보와 예외 메시지를 화면에 출력
2) getMessage() : 발생한 예외 클래스의 인스턴스에 저장된 메시지를 반환
*여러 종류의 예외를 하나의 catch 블럭에서 처리 하는 법(JDK 1.7부터 가능)
Ex> catch(ExceptionA | ExceptionB e) { }
→ catch 블럭 내의 예외들이 super/sub 관계에 있다면 비효율적인 코드이기 때문에 에러가 발생한다.
→ ‘|’ 기호로 연결할 수 있는 예외 클래스의 개수에는 제한이 없다.
*사용자 정의 Exception 발생 시키는 법(키워드 : throw)
try {
Exception e1 = new Exception("Error message");
throw e1;
} catch (Exception e1) {
System.out.println(e1.getMessage());
}
→ 아예 클래스를 생성하여 사용해도 된다.
*RuntimeException 의 경우, 프로그래머의 실수로 발생한 것이기 때문에 예외처리를 강제하지 않는다. 컴파일이 되기는 한다.
*메서드에 예외 선언(키워드 : throws)
Ex> void method() throws ExceptionA, ExceptionB, …, ExceptionN { }
→ 메서드 사용 시 예외처리를 강제시킨다.
*finally block
예외의 발생 여부와 상관없이 실행되는 코드 블럭
→ try block 내에 리턴문과 같이 구문을 빠져나가는 경우에도 finally block은 실행된다. 단, 프로그램 종료문(exit())을 만날 경우는 실행되지 않는다.
*Checked/Unchecked Exception
- Checked : RuntimeException 을 상속받지 않는 예외 클래스
→ 반드시 예외처리를 해주어야 한다.
- Unchecked : RuntimeException 을 상속받는 클래스
*Exception re-throwing
예외를 발생한 메서드에서 처리한 후 throw문을 통해 인위적으로 발생시켜 호출한 메서드에서 한 번 더 처리하도록 하는 것
*Chained Exception
예외 A가 예외 B를 발생시킨 경우, A를 B의 원인 예외(Cause Exception)이라고 한다.
원인 예외 등록 선언 : .initCause(e);
원인 예외 반환 : .getCause();
→ 원인 예외를 등록하는 이유
- 여러가지 예외를 큰 분류의 예외로 묶어서 다루기 위함
- Checked 예외를 Unchecked 예외로 바꿀 수 있도록 하기 위함
Ex>
throw new TestException(“msg”);
→ throw new RuntimeException(new TestException(“msg”));
'Java > Grammar' 카테고리의 다른 글
객체지향언어 TIP (2) (1) | 2022.11.30 |
---|---|
객체지향언어 TIP (1) (0) | 2022.11.14 |
배열 TIP (0) | 2022.11.04 |
조건문 & 반복문 TIP (0) | 2022.10.24 |
연산자 TIP (0) | 2022.10.24 |
댓글