- Published on
항해99 플러스 백엔드 코스 6기 언어 사전 스터디 4주차 (1) - 오류 및 에외처리
- Authors
- Name
- Kil Hyeon Jun
항해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
클래스
- 모든 예외 클래스의 최상위 클래스
Error
와Exception
클래스의 부모 클래스
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과 실제 예외 처리하는 방법을 이해