[Java] 예외 처리 개념 정리 #1: 예외 처리가 필요한 이유, 예외 계층

Yujeong·2024년 7월 21일
0

Java

목록 보기
21/22
post-thumbnail

예외 처리가 필요한 이유

시스템이 예상치 못한 상황에서도 안정적으로 동작하도록 하기 위해 예외 처리는 필수적이다.

  1. 외부 서버와 연결 실패
    네트워크 문제, 서버 다운타임, 잘못된 URL 등은 연결 실패로 이어질 수 있다.이 경우, 예외 처리를 통해 사용자에게 적절한 메시지를 전달하거나, 재시도 로직을 구현함으로써 시스템의 안정성을 유지할 수 있다.
  2. 데이터 전송 실패
    파일 읽기/쓰기 오류, DB 연결 실패 등은 데이터 전송 실패를 일으킬 수 있다.

정상 흐름과 예외 흐름

예외 처리를 하는 경우에 정상 흐름과 예외 흐름을 구분하는 것이 중요하다. 이것들을 구분하지 않으면 코드가 복잡하고 이해하기 어려워진다.

  • 정상 흐름 코드: 단순, 직관적
client.connect();
client.send(data);
client.disconnect();
  • 정상 흐름 + 예외 흐름 코드: 복잡, 이해하기 어려움
String connectResult = client.connect();
if (isError(connectResult)) {
	System.out.println("[Network Error] Error Code: " + connectResult);
} else {
	String sendResult = client.send(data);
    if (isError(sendResult)) {
    	System.out.println("[Network Error] Error Code: " + sendResult);
    }
}

예외 처리 메커니즘을 이용하면 정상 흐름과 예외 흐름을 명확히 분리할 수 있다.

예외 계층

1. 예외 처리 키워드

try catch finally throw throws

2. 예외 처리용 객체들

예외도 객체이다.

(출처: 김영한의 실전 자바 - 중급 1편)

  • Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구가 불가능한 시스템 예외
  • Exception
    • 애플리케이션 로직에서 사용할 수 있는 최상위 예외
    • 하위 예외도 모두 컴파일러가 체크하는 체크 예외
    • RuntimeException은 아님
  • RuntimeException
    • 언체크 예외, 런타임 예외
    • 컴파일러가 체크하지 않는 언체크 예외
    • 하위 예외도 모두 언체크 예외

체크 예외 vs 언체크 예외

  • 체크 예외는 발생한 예외를 개발자가 명시적으로 처리해야 한다. 그렇지 않으면 컴파일 오류가 발생한다.
  • 언체크 예외는 발생한 예외를 개발자가 명시적으로 처리하지 않아도 된다.

예외 기본 규칙

  1. 예외는 잡아서 처리하거나 밖으로 던져야 한다.
  2. 예외를 잡거나 던질 때, 지정한 예외뿐만 아니라 자식들도 함께 처리할 수 있다.
    • Exceptioncatch로 잡으면 하위 예외들도 모두 잡을 수 있음
    • Exceptionthrows로 던지면 하위 예외들도 모두 던질 수 있음

예외를 계속 던지면?

  • 자바 애플리케이션의 main() 쓰레드에서는 예외를 계속 던지면 애플리케이션이 종료된다. 예외 스택 트레이스(로그)가 출력되며, 프로그램이 비정상적으로 종료된다.
  • 웹 애플리케이션에서는 전체 시스템의 안정성이 저하될 수 있으므로, 예외를 잡아 처리하고 사용자에게 적절한 오류 페이지를 제공하여 시스템이 정상적으로 운영되도록 보장한다.

시나리오

  1. 예외 처리하는 경우
    MainService 호출
    ServiceClient 호출
    Client에서 예외 발생
    Client에서 예외를 처리하지 못하고 밖(Client가 호출한 Service)으로 던짐
    Service에 예외 전달되고 예외 처리
    ⑥ 정상 흐름 반환

  2. 예외 던지는 경우
    MainService 호출
    ServiceClient 호출
    Client에서 예외 발생
    Client에서 예외를 처리하지 못하고 밖(Client가 호출한 Service)으로 던짐
    Service에서 처리하지 못하고 Main으로 던짐


참고
김영한의 실전 자바 - 중급 1편
Class Throwable

profile
공부 기록

0개의 댓글

관련 채용 정보