Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Binary Tree
- Stack
- Class
- 자바
- sorting
- Tree
- dynamic programming
- string
- 코딩테스트
- java
- implement
- hash table
- Data Structure
- Counting
- Matrix
- 코테
- 구현
- array
- bit manipulation
- two pointers
- database
- Binary Search
- geometry
- SQL
- Math
- greedy
- 파이썬
- Number Theory
- simulation
- Method
Archives
- Today
- Total
코린이의 소소한 공부노트
멀티 catch 블록 본문
멀티 catch 블록은
1. 예외 타입은 다르지만 내용이 같은 catch 블록을 하나로 합친 것으로 (jdk 1.7부터 가능)
2. 코드의 중복 제거를 지원하는 기능이 있다.
3. OR 연산에 쓰이는 기호 |(shift + \)를 이용해 합칠 수 있다.
try{
// ..
} catch(ExceptionA e){
e.printStackTrace();
} catch(ExceptionB e){
e.printStackTrace();
}
// 멀티 catch 블록으로 바꾸면
try{
// ..
} catch(ExceptionA | ExceptionB e){
e.printStackTrace();
}
4. 주의사항
1) 멀티 catch 블록에 쓰일 예외 클래스에 부모-자식관계는 사용할 수 없다.
try{
// ..
// } catch(ParentException | ChildException e){ // 에러
} catch(ParentException e){ // 위의 코드와 의미상으로는 동일함
e.printStackTrace();
}
-instanceof 연산자를 이용해서 맞는 catch 블록을 찾기 때문에, 굳이 부모-자식관계를 멀티 catch로 할 필요가 없다.
2) 멀티 catch 블록에 선언된 참조변수는 해당 블록의 예외 클래스들의 공통 멤버만 접근 가능하다.
// ExceptionA에는 methodA()가 있고
// ExceptionB에는 methodB()가 있다.
try{
// ..
ExceptionB가 발생되는 코드
// ..
} catch(ExceptionA | ExceptionB e){
e.methodA(); // 에러
}
위 예시의 경우
- 컴파일 단계: catch 블록에 ExceptionA가 있기 때문에 methodA()를 호출 가능하다고 판단 -> 통과
- 실행 시: try문에서 ExceptionB가 발생하여 catch 블록으로 들어옴 -> methodA()를 호출할 수 없음 -> 에러
코드를 아래처럼 고치면 에러 없이 예외를 처리할 수 있다.
try{
// ..
} catch(ExceptionA | ExceptionB e){
if(e instanceof ExceptionA){
ExceptionA e1 = (ExceptionA)e; // 형변환 필요
e1.methodA();
}
else{ // if(e instanceof ExceptionB) 와 동일한 의미
// ..
}
}
사실, 이렇게 따로 처리할 거면 따로 catch 블록을 사용하면 된다. 하지만 멀티 catch 블록의 약점을 알아야 실수를 하지 않기 때문에 보여준 예시라고 생각해주면 좋겠다.
'Java' 카테고리의 다른 글
예외의 분류 - 컴파일러 기준 (0) | 2022.05.25 |
---|---|
예외 발생시키기 (0) | 2022.05.25 |
예외 메시지 출력 (0) | 2022.05.24 |
프로그램 오류의 종류와 예외 처리 (0) | 2022.05.19 |
익명 클래스 (0) | 2022.05.19 |