Java Study

예외 처리(Exception Handling)

Z00_HWAN_99 2024. 7. 7. 18:44
728x90
반응형

예외와 에러

  • 에러 : 컴퓨터 하드웨어 고장으로 인해 응용프로그램 실행 오류 발생.
  • 예외 : 잘못된 사용 또는 코딩으로 인한 오류.
  • 예외가 발생하면 프로그램은 곧바로 종료된다는 점은 에러와 동일하지만, 에러와 달리 예외 처리를 통해 계속 실행 상태를 유지할 수 있음.
  • 일반 예외(Exception) : 컴파일러가 예외 처리 코드 여부를 검사하는 예외.
  • 실행 예외(Runtime Exception) : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외.

예외 처리

  • 예외 발생 시 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있게 하는 코드.
  • 예외 처리 코드는 try~catch~finally 블록으로 구성.
  • try~catch~finally 블록은 생성자 내부와 메서드 내부에서 작성.
  • 자바의 모든 에러와 예외 클래스는  Throwable 클래스로 부터 상속받아 만들어짐.

다중 catch로 예외 처리하기

  • catch 블록의 예외 클래스는 try 블록에서 발생된 예외의 종류를 말함. 해당 타입의 예외가 발생하면 catch 블록이 선택되어 실행.
  • catch 블록이 여러 개라도 catch 블록은 단 하나만 실행됨.
  • 처리해야 할 예외 클래스들이 상속 관계에 있을 때는 하위 클래스 catch 블록을 먼저 작성하고 상위 클래스 catch 블록을 나중에 작성해야함.

리소스

  • 데이터를 제공하는 객체.
  • 리소스는 사용하기 위해 열어야(open)하며, 사용이 끝난 다음에는 닫아야(close)함.
  • 리소스를 사용하다가 예외가 발생될 경우에도 안전하게 닫는 것이 중요.
  • try-with-resources 블록을 사용하면 예외 발생 여부와 상관없이 리소스를 자동으로 닫아줌.

예외 떠넘기기

  • 메서드 내부에서 예외 발생 시 throws 키워드를 이용해 메서드를 호출한 곳으로 예외 떠넘기기.
  • throws는 메서드 선언부 끝에 작성. 떠넘길 예외 클래스를 쉼표로 구분해서 나열.
  • 나열할 예외 클래스가 많으면, throws Exception 또는 throws Throwable만으로 모든 예외 떠넘기기.

사용자 정의 예외

  • 표준 라이브러리에는 없어 직접 정의하는 예외 클래스
  • 일반 예외는 Exception의 자식 클래스로 선언.
  • 실행 예외는 RuntimeException의 자식 클래스로 선언.

예외 발생시키기

  • throw 키워드와 함께 예외 객체를 제공해 사용자 정의 예외를 직접 코드에서 발생시킬 수 있음.
  • 예외의 원인에 해당하는 메시지를 제공하려면 생성자 매개값으로 전달.

다중 catch 문

  • 하나의 try 블록 다음에 여러 개의 catch 블록이 오는 것.
    • try 블록에서 예외가 발생하면 첫 번째 catch 블록으로 예외가 전달됨.
    • 예외의 유형이 첫 번째 catch 블록과 일치하면 예외를 처리함.
    • 일치하지 않으면 다음 catch 블록으로 전달.
  • 예외의 유형이 확실하지 않을 때 유용.

try~catch~finally

  • finally 블록은 예외 발생 여부에 관계없이 실행됨.
    • 따라서 예외가 발생하든 발생하지 않든 실행해야 하는 명령문을 이 블록에 배치.
  • finally 블록은 try~catch 문이 실행된 후에 실행됨.
    • try 블록에서 예외가 발생하지 않으면 try 블록 실행 직후에 finally 블록이 실행됨.
    • try 블록에서 예외가 발생하면 각 catch 블록이 실행된 후 finally 블록이 실행됨.

throws 키워드

  • 프로그램 실행 중 메서드가 예외를 발생시킬 수 있도록 선언하려면 throws 키워드를 사용함.
  • 예외가 발생했을 때 발생한 메서드에서 직접 처리하지 않고 자신을 호출한 곳으로 떠넘기려는 경우에는 반드시 throws 를 선언해야 함.
    • 미확인 예외의 경우에는 throws 를 추가하지 않아도 됨.

사용자 정의 예외

  • 사용자가 새로운 예외 클래스를 만들어서 이용할 수 있는 방법.
  • java.lang 패키지의 Exception 예외 클래스를 상속받아 작성.
  • 사용자 정의 예외 클래스에 대한 생성자를 정의함.(필수는 아님)
  • toString() 메서드를 재정의하여 catch 블록에서 사용자 정의 메시지를 표시할 수 있음.
  • 사용자 정의 예외 클래스를 만들고 throw 키워드로 예외를 발생시켜 호출함.

https://github.com/bottomsUp-99?tab=repositories

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'Java Study' 카테고리의 다른 글

제네릭(Generic)이란?  (0) 2024.07.10
JDBC 라이브러리  (0) 2024.07.07
인터페이스(Interface)  (0) 2024.07.02
추상화  (3) 2024.07.01
@Override가 있고 없고의 차이  (2) 2024.06.30