자바 스터디 6회차

Yoojung Choi·2023년 2월 21일

JAVA 스터디

목록 보기
9/9

Error, Exception, RuntimeException 차이

자바에서는 실행 시 발생할 수 있는 오류들을 클래스로 정의했다.

  • error - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
    - 메모리 부족이나 스택오버플로우와 같이 발생하면 복구할 수 없는 심각한 오류들이다.
  • exception - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류, 주로 외부의 영향으로 발생할 수 있는 것들이 많고, 주로 사용자들의 동작에 의해서 발생하는 경우들이다.
  • RuntimeException 클래스들은 주로 프로그래머의 실수에 의해서 발생될 수 있는 예외들이다.
    - ArithmeticException : 산술연산과정에서 오류가 있을 때 발생하는 예외 - 정수를 0으로 나눈 경우
    • ArrayIndexOutOfBoundsException : 배열을 참조하는 인덱스가 잘못된 경우
    • ArrayStoreException : 배열 유형이 허락하지 않는 객체를 배열에 저장하려는 경우
    • ClassCastException : 숫자를 입력받아야하는데 숫자가 아닌 문자열을 입력 받는 경우

이런 예외들을 프로그래머가 미리 처리하기 위해 예외처리(exception handling)를 해준다.

예외처리

프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며, 프로그램의 비정상적인 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것이다. 예외처리를 해줘야 프로그램이 비정상적으로 종료되는 것을 막을 수 있다. 처리되지 못한 예외는 JVM의 예외처리기가 받아서 예외의 원인을 화면에 뜨워준다. 예외를 처리하기 위해서 try-catch문을 사용한다.

try, catch 문법

try{
	...
}catch(ArithmeticException e){
	arithmeticException이 발생했을 때 실행되는 코드
}

try, catch 작동 방식

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

예외 발생시
발생한 예외에 해당하는 클래스의 인스턴스가 만들어짐 -> 예외가 발생한 문장이 try 블럭에 포함되어 있다-> 예외를 처리할 수 있는 catch 블럭이 있는지 찾음

에러 메시지에 접근하는 방법

e.getMessage()
발생한 예외 클래스의 인스턴스에 저장된 메시지를 읽을 수 있고 오류에 대한 기본적인 내용을 출력해준다. Exception의 유형도 없이 정말 간단하게 왜 에러가 발생했는지 알려주기만 한다.

Exception 만들기 (new Exception(), new RuntimeException() 등등)

Exception e = new Exception("내용"); 구문으로 발생시키려는 예외 클래스의 객체를 만든 다음 throw를 이용해 예외를 발생시킨다.
throw new Exception("내용");으로 두 줄을 한줄로 줄여쓸 수도 있다.

0개의 댓글