꾸물꾸물 졔의 개발공부
01/25(1) - 예외처리 본문
Java 의 예외처리 : 오동작 (에러) / 비정상적 종료 (예외)
- 에러 : 심각도높음 --> 디버깅 필요
- 예외 : 심각도 낮음 --> 코드로 수습이 가능함
: 예외 발생시, 비정상적인 종료를 막고, 정상적인 실행상태를 유지해야함 , 즉, 예외감지 + 예외발생시 동작 코드 필요 !!!!
exception - checked : 예외에 대한 코드가 없으면 컴파일 불가능, 컴파일러가 예외에 대한 체크 함 !(RuntimeException) - unchecked : 컴파일은 진행되어짐, 컴파일러가 예외에 대한 체크 하지 않음 !
[ try - catch 문 ]
try { // 예외가 발생할 수 있는 코드} catch ( xxException e ) {// 예외 발생시, 처리 코드 } ---> try 문에서 예외발생하면, 예외에 대하여 new xxException 객체 생성 후, catch 문에게 throw !! catch 문에서 catch !! 잡음
Exception 객체 e 에 대해서, e.printStackTrace() : 어떤 예외가 발생했는지 , 어디서 발생했는지 추적해서 출력해줌 !
예외가 발생하면 try-catch 문으로 예외에 대한 처리를 해주거나 , 또는 해당 함수를 호출한 곳으로 throw xxexception / 예외를 던져주어서, 그곳에서 처리하도록 해야함
[ 다중 예외 처리, 다중 exception handling ] : try 문에서 여러종류의 예외가 발생 // 예외 종류별로, catch 블록 구성
try { -------------------> 만약에 ddException 이 발생하면,
} catch ( aaException a ) {
} catch ( bbException b) {
} catch ( ccException c) {
} catch ( Exception e ) {
// 여기서 처리가능, 다형성의 특징으로 부모클래스인 Exception 에서 처리가능 !!
}
-> catch 문장에서 다형성 적용 , 그렇기 때문에 , 상위타입의 catch 문이 먼저 작성되면 밑에 catch문은 동작기회 x
ex )
catch ( Exception e) {
} catch ( aaException a ) {
} // 상위 타입인 Exception 에서 어떤 예외든 처리가 가능하기 때문에 aaException -catch 코드는 무용지물이 됨 !
--> 예외처리가 상속관계를 가질 때는, 자식-부모순으로 정렬
+ 또한, 여러개의 예외가 발생했을 때,
1. 상위타입에서 모두 처리가 가능하므로, 상위로 묶어버림
catch (Exception e) { }
--> 그닥 좋은 방법은 아님, 각각의 예외에 대해서 상황별로 처리가 다를 수있기 때문에 !!
2. 여러개의 예외에 대해 같은 처리를 할 때,
catch (aaException | bbException e) { }
[try - catch - finally ]
fianlly : 예외 발생 여부와 상관없이 언제나 실행 !!!! try 나 catch 문안에서 return 을 만나도, finally 실행되고 return !!
ex) try 와 catch 문에서 중복으로 사용되는 코드가 있다면 finally 로 빼도됨
[사용자 정의 예외]
-checked: 명시적 예외처리 또는 throws 필수 ! == 코드는 복잡해도, 오류 발생 위험도가 없어짐
-runtime exception : 묵시적 예외처리가 가능 ! == 코드는 간결해지지만, 예외처리 누락 가능성 발생
+throws 로 예외처리를 해둔 매서드를 재정의 할때 !! 예외의 범위가 더 커지면 안됨
ex) public void add( ) throws IOException // 부모 클래스의 메서드의 함수
@Override
public void add() throws Exception // 자식 클래스에서 메서드 재정의
--> IOException < Exception
불가능 !!! 부모가 치지 않은 사고를 자식이 치면 안되지 ~
'SSAFY' 카테고리의 다른 글
02/03 - 표준입출력 , 재귀 (0) | 2022.02.04 |
---|---|
01/26 - 자료구조 ( list, set, map ) (0) | 2022.01.29 |
01/24(2) - Generics < 타입 명시 > (0) | 2022.01.25 |
01/24(2) - 인터페이스 (0) | 2022.01.25 |
01/24(1) - 추상클래스 (0) | 2022.01.24 |