예외처리

Jaca·2021년 9월 2일
0

프로그램 오류

프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정삭적으로 종료되는 경우를 에러 또는 오류라고 한다.

에러

  • 컴파일 에러 : 컴파일 시에 발생하는 에러 (가장 좋은 에러)

  • 런타임 에러 : 실행 시에 발생하는 에러

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

컴파일 에러는 컴파일러가 소스코드에 대해 오타나 잘못된 구문, 자료형 체크 등 기본적인 검사를 수행 한다.
컴파일러가 기본적인 사항은 걸러줄 수 있지만, 실행 시 발생할 잠재적인 오류까지 잡아줄 수는 없다.
자바에서는 실행 시 발생할 수 있는 프로그램 오류를 '에러'와 '예외' 두가지로 구분한다.

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

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

예외 클래스의 계층 구조

자바에서 실행 시 발생할 수 있는 오류를 클래스로 정의하였다.

모든 예외의 최고 조상은 Exception 클래스이며, 상속 계층도를 Exception 부터 살펴보자면 아래와 같다.

위 상속 계층도의 파란색 블럭의 클래스들과 이 외의 클래스는 차이가 있다.

  • Exception 클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
    (ArrayIndexOutof..., NullPointer..., Arithmetic...)

  • RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외
    (FileNotFound..., ClassNotFound..., DataFormat...)

예외 처리 메서드

  • printStackTrace() : 예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메세지를 화면에 출력함

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

예외 발생시키기

키워드 throw 를 사용해서 고의적으로 예외를 발생시킬 수 있다.

new Exception(String) 으로 새로운 예외 클래스 객체를 만들고 throw 연산자로 던진다.
생성자에 String을 넣어 주면, 이 String이 Exception 인스턴스에 메세지로 저장된다.
이 메세지가 getMessage() 로 읽어들이는 메세지이다.

메서드에 예외 선언하기

예외를 메서드에 선언할 수도 있다.
메서드에 예외를 선언하려면, 메서드의 선언부에 throws 를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주면 된다. 쉼표',' 를 통해 여러개의 예외를 선언할 수 도 있다.

void method() throws Exception1, Exception2, Exception3 { }

만일 최고 조상인 Exception 클래스를 선언하면, 모든 종류의 Exception을 제외하게 된다.
앞서 오버라이딩에서 살펴본 것과 같이, 오버라이딩할 때는 단순히 선언된 예외의 개수가 아니라 상속관계까지 고려해야한다.

사용자 정의 예외 만들기

프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다.

class MyException extends Exception {
	MyException(String msg) {
    	super(msg);
    }
}

Exception 클래스로부터 상속받아 만들었다.
필요하다면, 멤버 변수나 메서드를 추가할 수 있다.
Exception 클래스는 생성 시에 String값을 받아서 메세지로 저장할 수 있다.
사용자 정의 예외 클래스도 메세지를 저장하려면, String을 매개변수로 가진 생성자를 추가해야한다.

복습하자.

이번 장은 좀 가볍게 읽고 넘어간 경향이 크다.
아직 예외처리는 내공이 부족한 것같다.
예외처리야 말로 경험치가 쌓여야할테니 반드시 추후에 다시 읽자

profile
I am me

0개의 댓글