본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 예외 발생시키기 / checked예외 / unchecked예외 / finally블럭 / 사용자 정의 예외 만들기 / 연결된 예외 )

by ✲ 2020. 7. 19.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

예외 발생시키기 

1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체 만든 다음 

2. 키워드 throw를 이용해서 예외를 발생시킨다. 

Exception e = new Exception("고의로 발생시켰음 ");

throw e; 

> throw new Exception("고의로 발생시켰음 ");          ← 위 두줄을 한줄로 줄여 쓸 수 있음 

 

checked 예외 

- 컴파일러가 예외 처리 여부를 체크 (예외처리 필수) (Exception

unchecked 예외

- 컴파일러가 예외 처리 여부를 체크 안함 (예외처리 선택) (RuntimeException

 

메서드에 예외 선언하기 

- 예외를 처리하는 방법 : try-catch문, 예외 선언하기 

- 메서드가 호출시 발생가능한 예외를 호출하는 쪽에 알리는 것 

- 예외를 발생시키는 키워드 throw와 예외를 메서드에 선언할 때 쓰이는 throws 잘 구별해야 함 

void method() throws Exception1, Exception2,.... ExceptinonN{
    //메서드의 내용
}
// method()에서 Exception과 그 자손 예외 발생 가능
void method() throws Exception{    //Exception 모든 예외 발생 가능 
    // 메서드의 내용
}

(오버라이딩 / 선언부 일치, 접근제어자보다 좁게 X, 조상보다 많은 예외 선언 X) 

 

finally 블럭

- 예외 발생 여부와 관계없이 수행되어야 하는 코드를 넣는다. 

try {
    // 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception e1){
    // 예외처리를 위한 문장을 적는다.
} finally {
    // 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다. 
    // finally블럭은 try-catch문의 맨 마지막에 위치해야 한다.
}
* try블럭 안에 return문이 있어서 try블럭을 벗어나갈 때도 finally블럭이 실행된다. 

 

사용자 정의 예외 만들기

- 직접 예외 클래스를 정의할 수 있다. 

- 조상은 Exception 과 RuntimeException 중에서 선택 

class MyException extends Exception {
    MyException (String msg) { //문자열을 매개변수로 받는 생성자 
        super(msg); // 조상인 Exception클래스의 생성자 호출
    }
}

 

예외 되던지기 (exception re-throwing) 

- 예외를 처리한 후에 다시 예외를 발생시키는 것

- 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것 

(양쪽에서 예외처리 / 즉 2번 예외처리) 

 

연결된 예외 (chained exception)

- 한 예외가 다른 예외를 발생시킬 수 있다.

- 예외A가 예외B를 발생시키면, A는 B의 원인 예외 (cause exception) 

Throwable initCause(Throwable cause) : 지정한 예외를 원인 예외로 등록

Throwble getCause()  : 원인 예외를 반환 

 

연결된 예외 사용이유 1 

- 여러 예외를 하나로 묶어서 다루기 위해서 

try { 
    install() ;
}catch(SpaceException e) {
    e.printStackTrace();
}catch(MemoryException e) { 
    e.printStackTrace();
}catch(Exception e){
    e.printStackTrace();
}

try{
    install();
}catch(InstallException e){
    e.printStackTrace();
}catch(Exception e){
    e.printStackTrace();
}

연결된 예외 사용이유 2 

- checked예외를 unchecked예외로 변경하려 할 때 (필수처리(Exception) 를 선택처리(RuntimeException)로 변경할 때 ) 

반응형

댓글