본문 바로가기
IT/Java

예외 처리

by 봉즙 2019. 6. 27.

컴파일 에러 : 컴파일시 발생하는 에러 (한계가 존재)

런타임 에러 : 실행 시에 발생하는 에러 (실행 중 문제 발생)

논리적 에러 : 실행은 되지만 의도와 다르게 작동

 

에러 : 프로그램 코드에 의해서 수습될수 없는 심각한 오류

예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

Exception 클래스 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

RuntimeException 클래스 : 프로그래머의 실수로 발생하는 예외

 

예외처리

  • 프로그램 실행시 발생할 수 있는 예외에 대한 코드를 작성하는 것
  • 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는것
try {
	//예외가 발생할 가능성이 있는 문장들을 넣는다.
}catch (Exception e1) {
//Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}catch (Exception e2) {
//Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}catch (Exception e3) {
//Exception3이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}

 

try-catch문에서의 흐름

  • try블럭내에서 예외가 발생한 경우
    1. 발생한 예외와 일치하는 catch블럭이 있는지 확인
    2. 일치하는 catch블럭 찾으면, 그 catchㅡㄹ럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.
  • try블럭 내에서 예외가 발생하지 않은 경우
    1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.

※catch블럭은 ()괄호와 {}블럭 두 부분으로 나눠져있다. 괄호는 처리하고자 하는 예외와 같은 타입의 참조변수 하나를 선언해야 한다.

 

printStacTrace() : 예외발생 당시의 call stack이 있었던 메서드의 정보와 예외 메세지를 화면에 출력

getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.

 

멀티 catch블럭 : 하나의 catch블럭으로 중복된 것을 처리한다.

try{
	...
}catch(ExceptionA | ExceptionB e){
e.printStackTrace();
}

 

고의로 예외 발생

  1. 연산자 new를 이용하여 발생시키려는 에외 클래스의 객체를 만든다.
Exception e = new Exception ("고의 발생");

    2.키워드 throw를 이용하여 예외 발생

throw e;

 

메서드에 예외 선언

void method() throws Exception1, Exceptio2, ...EcxeptionN {
//메서드의 내용
}

※예외 발생시키는 throw와 예외 메서드 선언시 쓰이는 throws는 다름

만약 모든에외의 초고조상인 Exception클래스 메서드에 선언시 모든 종류의 예외가 발생할 가능성이 있다는 것이다. 상속관꼐까지 고려해야 하며 조상보다 많은 예외 throw하면 코드가 불안정해 진다.

 

finally 블럭

try-catch문과 예외의 발생여부와 상관없이 실행되어야 할 코드를 포함 시킬 목적으로 사용

 

try - with - resource : ()괄호 안에 객체를 생성하는 문장을 넣으면, 이 객체는 따로 close()호출하지 않아도 try블럭을 벗어나는 순간 자동적으로 close()가 호출된 후 catch블럭이나 finally블럭이 선언된다.

 

사용자 정의 예외 만들기

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

 

예외던지기 : 하나의 예외에 대햇서 예외가 발생한 메서드와 이를 호출한 메서드 양쪽 모두에서 처리해줘야 할 작업이 있을때 사용

 

chained exception : 한 예외가 다른 예외를 발생시키는 것도 가능

  • Throwable initCause (Throwable cause) : 지정한 에외를 원인 에외로 등록
  • Throwalbe getCause() : 원인 예외를 반환

'IT > Java' 카테고리의 다른 글

ArrayList  (0) 2019.07.03
공변환 타입  (0) 2019.06.28
inner class  (0) 2019.06.26
interface  (0) 2019.06.26
abstract class  (0) 2019.06.26

댓글