Day 37

ChangWoo·2023년 5월 12일
0

자바의 정석

목록 보기
37/71
post-thumbnail

ch 8-1~3 프로그램오류, 예외 클래스의 계층구조

프로그램 오류

컴파일 에러(compile-time-error) : 컴파일 할 때 발생하는 에러
런타임 에러(runtime-error) : 실행할 때 발생하는 에러
논리적 에러(logical-error) : 작성 의도와 다르게 동작

  • 자바 컴파일러 : 1.구문체크 2.번역 3.최적화

Java의 런타임 에러

  • 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
  • 에러는 어쩔 수 없지만, 예외는 처리하자.

예외처리의 정의와 목적

예외처리(exception handling)의
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것

예외 클래스의 계층 구조

  • Object : 최고 조상
  • Throwable : 클래스. 모든 오류의 조상
  • Error : 심각한 오류
  • Exception : 미약한 오류
  • OutOfMemoryError : 메모리 부족

Exception과 RuntimeException

  • Exception과 그 자손들 / RuntimeException과 그 자손들로 분류할 수 있다.
  • RuntimeException도 Exception의 자손
  • Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
  • RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외
  • IOException : 입출력예외(입력(Input), 출력(Output)) / 외부기기에 입출력 시 예외발생
  • ClassNotFoundException : 클래스가 존재하지 않을 때 예외발생
  • ArithmeticException : 산술계산예외 (Ex : 5/0)
  • ClassCastException : 형변환예외
  • NullPointerException : 널 포인터예외 (Ex : String이 null인데, str.length를 구할 때)
  • IndextOutOfBoundsException : 배열 범위를 벗어나는 것

ch 8-4~6 예외 처리하기, try~catch문의 흐름

예외 처리하기. try-catch문

예외처리(exception handling)의
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것

try {
	// 예외가 발생할 가능성이 있는 문장을 넣는다.
} catch (Exception e1) {
	// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception e2) {
	// Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception eN) {
	// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}
  • if문과 달리, try블럭이나 catch블럭 냉레 포함된 문장이 하나뿐이어도 괄호{}를 생략할 수 없다.

try-catch문에서의 흐름

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

  • 예외가 발생하지 않았기 때문에 4를 출력하지 않는다.
  • 예외발생(0으로 나누는 것이 불가능!)으로 인해 2를 출력하지 않고, catch문으로 가서 3을 출력하고 try-catch문을 빠져 나와서 4를 출력한다.

예외의 발생과 catch 블럭

예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
Exception이 선언된 catch블럭은 모든 예외처리 (마지막 catch블럭)

  • 예외가 발생했으므로 4는 출력하지 않고, ArithmeticException이기 때문에 아래의 Exception을 처리하지 않는다.
  • Exception은 모든 예외의 최고 조상이기 때문에 마지막에 와야 한다. (= 모든 예외 처리 가능)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글