Published on

항해99 플러스 백엔드 코스 6기 언어 사전 스터디 4주차 (1) - 오류 및 에외처리

Authors
  • avatar
    Name
    Kil Hyeon Jun
    Twitter

항해99 플러스 백엔드 코스 6기 언어 사전 스터디 4주차 - 오류 및 예외처리

1. 오류 (Error)와 예외 (Exception)

오류 (Error)

  • 일반적으로 회복이 불가능한 심각한 문제
  • 시스템 레벨에서 또는 환경적인 요인으로 발생
  • 코드의 문제로 발생하는 경우도 있지만, 일단 발생하는 경우 일반적으로 회복이 불가능

예외 (Exception)

  • 일반적으로 회복이 가능한 문제
  • 회복이 가능하다는 전제는 우리가 예외 상황을 미리 인지하고, 처리할 수 있는 방법을 가지고 있어야 한다는 것

코드 실행 관점에서의 예외의 종류

  • 컴파일 에러 (Compile Error)

    • 컴파일 시 발생하는 에러 (.java 파일을 .class 파일로 변환하는 과정에서 발생)
    • 문법적인 오류 (Syntax Error)
  • 런타임 에러 (Runtime Error)

    • 프로그램 실행 중 발생하는 에러

예외처리 관점에서의 예외의 종류

  • 확인된 예외 (Checked Exception)

    • 컴파일러가 강제로 예외 처리를 요구하는 예외
    • try-catch 블록이나 throws 키워드로 처리해야 함
  • 확인되지 않은 예외 (Unchecked Exception)

    • 컴파일러가 예외 처리를 강제하지 않는 예외
    • RuntimeException 클래스를 상속받은 예외

2. 예외처리 (Exception Handling)

예외처리의 목적

  • 프로그램의 비정상 종료를 방지
  • 프로그램의 안정성을 높임
  • 예외 발생 시 프로그램의 흐름을 제어

예외처리 방법

  • try-catch 블록
  • throws 키워드
  • finally 블록

try-catch 블록

try {
    // 예외가 발생할 수 있는 코드
} catch (Exception e) {
    // 예외 처리 코드
}
  • try 블록 내에서 예외가 발생하면 catch 블록으로 이동
  • catch 블록에서 예외 처리
  • catch 블록은 여러 개 사용 가능

throws 키워드

  • 메소드 선언부에 사용
  • 메소드가 던지는 예외를 호출한 쪽에서 처리하도록 위임
public void method() throws Exception {
    // 예외가 발생할 수 있는 코드
}

finally 블록

  • try-catch 블록이 끝나면 항상 실행되는 블록
  • 주로 리소스 반환을 위해 사용
try {
    // 예외가 발생할 수 있는 코드
} catch (Exception e) {
    // 예외 처리 코드
} finally {
    // 리소스 반환 코드
}

3. 예외 클래스 (Exception Class)

Throwable 클래스

  • 모든 예외 클래스의 최상위 클래스
  • ErrorException 클래스의 부모 클래스

Error 클래스

  • 시스템 레벨에서 발생하는 심각한 문제

Exception 클래스

  • 일반적인 예외를 처리하기 위한 클래스
  • RuntimeException 클래스를 상속받은 예외는 예외 처리를 강제하지 않음 (Unchecked Exception)

4. Chained Exception, 실제 예외 처리하는 방법

Chained Exception (연결된 예외)

  • 예외는 다른 예외를 유발할 수 있음
  • 얘외 A가 예외 B를 발생시켰다면, 예외 A는 B의 원인 예외
  • 원인 예외를 새로운 얘외에 등록한 후 다시 새로운 예외를 발생시키는데, 이를 예외 연결이라고 함

예외를 연결하는 이유

  • 여러가지 예외를 하나의 예외로 묶어서 처리하기 위해
  • checked 예외를 unchecked 예외로 포장(wrap)하기 위해
    • checked 예외를 unchecked 예외로 포장하면 예외 처리를 강제하지 않아도 됨

원인 예외를 다루기 위한 메소드

  • getCause(): 원인 예외를 반환
  • initCause(Throwable cause): 원인 예외를 등록
public class ChainedExceptionExample {
    public static void main(String[] args) {
        try {
            NumberFormatException ex = new NumberFormatException("가짜 예외");

            ex.initCause(new NullPointerException("원인 예외"));

            throw ex;
        } catch (NumberFormatException e) {
            System.out.println("예외: " + e.printStackTrace());
            System.out.println("원인 예외: " + e.getCause().printStackTrace());
        }

        throw new RuntimeException(new Exception("원인 예외"));
    }
}

실제 예외 처리하는 방법

  • 예외 복구
  • 예외 처리 회피
  • 예외 전환

5. 정리

  • 오류와 예외의 개념을 이해하고, 예외처리의 목적을 파악
  • 예외처리 방법과 예외 클래스에 대해 학습
  • Chained Exception과 실제 예외 처리하는 방법을 이해