8장 예외처리 요약

서현우·2022년 6월 26일
0

자바의정석

목록 보기
20/22

예외처리(Exception Handling)

에러 또는 오류란?

프로그램의 오작동이나 비정상적인 종료를 발생시키는 원인을 말하고, 컴파일에러, 런타임에러, 논리적에러로 구분된다.

에러 - 컴파일에러
	- 런타임에러 ----- 에러
    - 논리적에러		- Exception(예외) -------- RuntimeException과 그 자손
    										- RuntimeException과 그 자손을 제외한 Exception

에러에는 컴파일에러, 런타임에러, 논리적에러가 있고, 
런타임에러는 에러와 예외(Exception)로 구분된다.
이 중 예외에는 런타임익셉션과 런타입익셉션을 제외한 익센셥이 있다.

에러의 종류는?

컴파일 에러는 컴파일 시에 발생하는 에러, 런타임 에러는 실행 시에 발생하는 에러, 논리적 에러는 실행은 되지만, 의도와 다르게 동작하는 것을 말한다.

런타임에러란?

런타임, 즉 실행도중 발생할 수 있는 오류에는 에러와 예외가 있고, 에러에는 프로그램 코드에 의해서 수습 불가능한 OutOfMemoryError, StackOverflowError같은 것이 있고, 예외에는 프로그램 코드에 의해 수습이 가능한 ArithmeticException, NullPointerException같은 것이 있다.

StackOverflowError란?

재귀호출같이 Stack영역의 메모리가 오버플로우 될 때, 즉 지정된 범위를 넘어갈 때 발생한다.

예외(Exception)란?

런타임 중 발생하는 에러 중 프로그램 코드에 의해 수습 가능한 오류로서, 모든 예외의 최고 조상은 Exception클래스이고, 상속계층도로 보면 두 그룹 RuntimeException클래스와 그 자손, RuntimeException과 자손을 제외한 Exception클래스로 나눌 수 있다.

RuntimeException이란?

프로그래머의 실수로 발생하는 예외로서, 예외처리가 필수가 아닌 unchecked예외이다. RuntimeException의 예외처리가 필수라면, 참조변수와 배열이 사용되는 모든 곳에 예외처리를 해줘야 하기 때문에 unchecked예외로 처리한다.

Exception이란?

사용자의 실수나 외적인 요인으로 발생하는 예외로서, 예외처리가 필수인 checked예외이다.

예외처리(Exception Handling)란?

정의는 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것이고, 목적은 프로그램의 비정상적인 종료를 막고, 정상적인 실행상태를 유지하는 것이다.
예외를 처리하지 못하는 경우에 프로그램은 비정상적으로 종료되고, 처리되지 못한 예외는 JVM의 예외처리기가 받아서 예외의 원인을 화면에 출력한다.
예외를 직접 처리하기, 예외 떠넘기기, 예외 되던지기, 캐쳐메서드 만들기가 있다.

try-catch문이란?

예외를 처리하는 방법 중 하나로서, try문과 catch문으로 구성된다.

try-catch문의 흐름은?

try블럭에서 예외가 발생하면 그 예외 클래스의 인스턴스가 생성되고, instanceof연산자로 catch문에 있는 예외클래스의 참조변수를 검사한다. true가 있으면 그 catch블럭의 문장을 실행하고, true가 없으면 예외는 처리되지 못하고 JVM의 예외처리기가 처리하게 된다.

printStackTrace(), getMessage()

예외가 발생하면 그 예외클래스의 인스턴스가 생성되고, 이 인스턴스와 instanceof연산자로 검사결과가 true가 나온 catch문의 참조변수로 예외에 대한 정보를 볼 수 있다. 이 때 사용되는 메서드가 getMessage()와 printStackTrace()이다.

예외 발생시키기란?

키워드 throw를 사용해서 고의로 예외를 발생시킬 수 있다.
예외 되던지기나 TDD에서 사용할 수 있다.

예외 선언하기란?

메서드의 선언부에 throws를 붙여서 예외를 떠넘기는 방법으로, checked 예외인 Exception은 예외선언을 해야하지만, unchecked 예외인 RuntimeException은 예외선언을 하지 않는다.

finally블럭

예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다. 예외가 발생한 경우 try -> catch -> finally 순으로, 예외가 발생하지 않으면 try -> finally 순으로 실행된다.

try-with-resources문이란?

입출력 클래스 중에서, AutoClosable 인터페이스를 구현한 객체를 자동종료 시킬 때 사용된다.

사용자 정의 예외 만드는 방법은?

Exception이나 RuntimeException을 상속받아서 직접 예외 클래스를 정의할 수 있다.

예외 되던지기란?

호출 받은 곳와 호출 한 곳 양쪽에서 예외를 나누어서 처리하는 것으로, 호출 받은 곳의 예외가 발생할 곳에 try-catch문으로 처리하고, throw로 다시 예외를 발생시켜서 호출 한 곳으로 넘겨준다.그리고 호출 한 곳에서도 try-catch문으로 예외를 처리한다.

연결된 예외란?

checked예외를 unchecked예외로 변경하기 위해 사용하고, checked예외를 unchecked예외로 감싸서 작성한다.

추가

  • Exception을 처리하는 catch블럭은 모든 catch블럭 중 제일 마지막에 있어야 한다.(예외클래스의 조상일수록 아래 catch블럭으로 처리해야 한다)
profile
안녕하세요!!

0개의 댓글