상세 컨텐츠

본문 제목

JAVA 11. 예외처리 (try-catch / throws / try-with-resources)

Backend/JAVA-자바

by 사랑짱 2021. 6. 24. 21:20

본문

 

◆ 오류의 종류

- 에러(Error) : 하드웨어의 잘못된 동작 또는 고장으로 인한 오류

- 예외(Exception) : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오류

 

※ 에러와 예외 비교

- 공통점 : 발생되면 프로그램 종료

- 차이점 : 에러(Error)는 정상 실행 상태로 돌아갈 수 없다.

              예외(Exception)는 예외처리를 추가하여 정상 실행 상태로 돌아갈 수 있다.

 

 따라서, 개발자는 우리가 처리해야 할 예외(Exception)에 집중해야한다!

 

 

◆ 예외의 종류

- 일반 예외(Checked Exception) : 예외처리 코드 없으면 컴파일 오류 발생(컴파일 시 체크)

- 실행 예외(RuntimeException) : 예외처리 코드를 생략하더라고 컴파일이 되는 예외

                                             경험에 따라 예외처리 코드 작성 필요

 

※ 프로그램의 안정성을 확보하기 위해 예외처리 작업은 매우 중요하다!!!

 

 

◆ 예외 클래스의 구조

- 예외 처리의 최상위 클래스 : Throwable class 

- Throwable class를 상속받는 하위클래스

   (1) Error class

   (2) Exception class : Checked Exception, RuntimeException()

 

출처 : TCP school

 

- Checked Exception : 반드시 예외처리를 작성해야 컴파일 가능 --> try-catch 를 꼭 해야 한다!

- RuntimeException : 컴파일러가 개입하지 않으며, 개발자 경험에 의해 작성해야 한다.

  Checked Exception RuntimeException
처리 여부 반드시 예외 처리 해야함 예외 처리하지 않아도 됨
트랜잭션 Rollback 여부  Rollback 안됨  Rollback 진행
대표 Exception IOException,
SQLException
NullPointerException,
IllegalArgumentException

 

 

◆ 실행 예외(RuntimeException)의 종류 

다양한 실행 예외의 종류가 있으나 대표적인 예외에 대해 알아보자.

 

- NullPointerException : 객체 참조가 없는 상태(참조변수가 비어있을 때)

- ArrayIndexOutOfBoundsException : 배열에서 인덱스 범위를 초과하여 사용하는 경우 발생

- ClassCastException : 상속관계에서 타입 변환이 되지 않을 경우 발생

 

 

◆ 예외 처리 코드(try-catch-finally)

- 예외 발생 시 프로그램 종료를 막고, 정상 실행 유지할 수 있도록 처리

- catch문의 매개변수로 예외객체를 인자로 전달받아 catch문에서 사용하여 처리

 

▷ 정상 실행되었을 경우 : try문(예외 발생여부에 따라 실행)

finally문- 예외 발생되었을 경우 : try문(예외 발생여부에 따라 실행) - catch문 - finally문

 

 

※ 예외 정보 얻기 (catch() 절에서 활용)

- getMessage( ) : 예외 발생 시 생성자 매개값으로 사용한 메시지를 리턴

- printStackTrace( ) : 예외 발생 코드 추적한 내용을 출력

출처 : 이것이 자바다

 

 

◆ 다중 예외 처리 시 주의사항

- 다중 catch문 작성 시 상위클래스(Exception)로 처리하면

  모든 예외가 처리되기 때문에 하위 예외처리를 할 필요가 없다.

  다만,  Exception이 가장 상위에 위치하면 어떤 예외인지 정확한 파악이 어렵다!!

  따라서 예외처리는 하위 예외 -> 상위 예외 순으로 작성하고 Exception은 가장 나중에 작성하자!

 

※ Throwable 블록으로 처리할 수 있는  error도 있다!!

 

다중 예외처리의 예시

 

 

  예외 떠 넘기기(throws)

- 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠 넘기는 역할

- 메소드 선언부 끝에 작성

 

 

 

◆ 사용자 정의 예외

- 자바 표준 API에서 제공하지 않는 예외

- application service와 관련된 예외 (대부분  CheckedException 으로 예외 처리)

  Ex) 잔고 부족 예외, 계좌 이체 실패 예외, 회원 가입 실패 예외 등

 

 

※ 사용자 정의 예외 클래스 선언 방법

step 1. 예외의 종류 결정 - CheckedException | RuntimeException

step 2. 예외클래스 생성  (Constructor OverLoading)

      - default constructor : 단순 예외 객체 생성할 때 사용하는 생성자

      - constructor : 예외 메시지까지 함께 생성할 때 사용하는 생성자

step 3. 예외 발생시키기 (호출된 곳에서 발생한 예외를 처리하도록 예외 객체 생성)

 

 

 

◆ 자동 리소스 닫기(try-with-resources)

- 예외 발생 여부과 상관없이,

  사용했던 리소스 객체의 close() 메소드를 호출하여 리소스를 닫음

  try-catch문이 종료되면, resource도 함께(with) close()로 닫힌다!!

 

※ 리소스 객체

- java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다.

 

<자바 8버전>

 

<자바 11버전>

 

 

※ try블록이 정상적으로 실행되었거나 도중에 예외가 발생하면 자동으로 close( )메소드가 호출!

 

 

관련글 더보기