본문 바로가기

TIL(Today I Learned)

TIL-230923(자바의정석 Chapter08 '예외처리')

📝오늘 공부한 것

  • 자바의 정석 공부 - Chapter 09
  • 이력서 수정하기
  • 자바의 정석 스터디

 

📌 자바의 정석 스터디

[ 예외처리 ]

프로그램 오류

컴파일 에러 : 컴파일 시 발생하는 에러

런타임 에러 : 실행 시 발생하는 에러

논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것

 

에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

예외 클래스의 계층구조

 

Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외

 

printStackTrace()와 getMessage()

printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력

getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있음.

unchecked예외 : 컴파일러가 예외처리를 확인하지 않는 RuntimeException

checked예외 : 예외처리를 확인하는 Exception클래스들

 

메서드에 예외 선언하기

메서드에 예외를 선언할 때 일반적으로 RuntimeException클래스들은 적지 않는다. 이 들을 메서드 선언부의 throws에 선언한다고 해서 문제가 되지는 않지만, 보통 반드시 처리해주어햐 하는 예외들만 선언한다.

 

자동 자원 반환 - try - with -resources

사용했던 자원을 반환하기위해서는 입출력에 사용되는 클래스 중에서는 사용한 후에 꼭 닫아 줘야하는 것들이 있다.

void addSuppressed(Throwable exception) : 억제된 예외를 추가

Throwable[] getSuppressed() 억제된 예외(배열)를 반환

가능하면 새로운 예외 클래스를 만들기보다 기존의 예외클래스를 활용하자!!

 

예외 되던지기(exception re-throwing)

예외가 발생할 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업을 행한 후에 throw문을 사용해서 예외를 다시 발생시킨다. 다시 발생한 예외는 이 메서드를 호출한 메서드에게 전달되고 호출한 메서드의 try-catch문에서 예외를 또다시 처리한다.

→ 하나의 예외에 대해서 예외가 발생한 메서드와 이를 호출한 메서드 양쪽 모두에서 처리해줘야 할 작업이 있을 때 사용됨.

이때!주의할 점은 예외가 발생할 메서드에서는 try-catch문을 사용해서 예외처리를 해줌과 동시에 메서드의 선언부에 발생할 예외를 throws에 지정해줘야 한다는 것이다.

 

연결된 예외

Throwable initCause(Throwable cause) 지정된 예외를 원인 예외를 등록

Throwable getCause() 원인 예외를 반환

→ checked예외를 unchecked예외로 바꿀 수 있도록 하기 위해서 사용