seaking110 님의 블로그
예외 처리! 본문
오류 (Error) vs 예외(Exception)
- 사용자가 입력 데이터를 잘못 입력 했을 경우 : 예외
- 입력 범위를 넘어선 숫자가 입력 됐을 경우 : 오류
- 컴퓨터에 메모리가 부족할 경우 : 오류
오류
- 오류는 일반적으로 회복이 불가능
- 시스템 레벨 또는 환경적인 이유로 발생
- 로그를 확인하고 어떠한 이유인지 확인 후 대응
예외
- 예외는 일반적으로 회복 가능
- 예외가 발생할 수 있다는 점은 미리 인지하고 대응 가능
코드 실행 관점에서 예외의 종류
- 컴파일 에러
- java 파일을 class 파일로 컴파일 할때 생기는 에러
- 프로그래밍 언어의 규칙을 지키지 않았기 때문에 발생
- 대부분 문법을 안지켜서 발생하므로 코드 수정으로 간단히 해결 가능
- 런타임 에러
- 문법적인 오류가 아니라 컴파일은 잘 되었지만 실행 도중 외부적인 환경 때문에 생기는 에러
처리 관점에서의 예외의 종류
- 확인된 예외 (checked Exception)
- 미리 인지한 문제에 대한 처리를 정의해뒀기 때문에 상관 없다.
- 미확인된 예외 (Unchecked Exception)
- 예외 처리가 반드시 필요하지 않은 예외
- 런타임 시점에 확인되는 예외
예외 처리 방법
- 예외를 정의
- 예외 발생 알림
- 사용자가 예외를 핸들링 할 수 있게 처리
예외 클래스
- Exception 을 상속 받아 예외 클래스를 만든다
- 예외가 발생 할 수 있는 메서드에 예외 클래스를 throws라는 예약어를 사용하고 예외 클래스를 받는다
- throw를 통해 실제로 예외 객체를 던질 때 사용하는 예약어
- throw 아래 구문들은 실행되지 않고 메서드가 종료
//예외 클래스
public class OurBadException extends Exception{
// 예외 클래스를 만들어서 예외를 정의
public OurBadException (){
super("위험한 행동을 하면 예외로 처리해야함!");
}
}
//예외가 발생할 메서드
public void thisMethodIsDangerous () throws OurBadException {
//danger login
if(문제가 발생 했다면){
throw new OurBadException();
}
System.out.println("문제 발생"); // 출력되지 않는다!!
}
try - catch - finally 구문
- try : 우선 시도하는 코드
- catch () : 예외가 발생했을 때의 코드
- finally : 예외가 발생하든 아니든 반드시 수행되어야 하는 코드
- 위 3가지 구문을 사용하여 위험한 메서드를 사용할 수 있다.
OurClass ourClass = new OurClass();
try{
ourClass.thisMethodIsDangerous();
}catch (OurBadException e) {
System.out.println(e.getMessage()); // 미리 저장해둔 오류 메시지를 가져오는 코드
}finally{
System.out.println("무조건 실행되는 코드 입니다!");
}
Throwable Class
- object 클래스에서 시작
- 모든 문제사항을 가지고 있는 클래스
- Throwable 클래스의 자식으로 Error와 Exception클래스가 있다
- Error 클래스는 자식으로 IOError 클래스를 보유
- Exception 클래스는 자식으로 IOException 클래스와 RuntiomeException 등을 보유

Exception 상세 자료

- IOException은 checked Exception으로 컴파일 에러 발생
- RuntimeException 은 unchecked Exception으로 컴파일 에러가 발생 x
- 에러에는 수많은 구현체가 있고 필요한 구현체가 없다면 직접 정의 구현하면 된다!
Chained Exception
- 연결된 예외
- 예외로 다른 예외를 유발
- 예외 A가 예외 B를 발생시켰다면 예외 A는 B의 원인 예외 (이니쉬)
- 따라서 A와 B를 연결할 수 있다.
- 예외를 연결하는 이유
- 여러 가지 예외를 하나의 큰 분류로 묶어서 다루기 위해
- checked Exception 을 unchecked Exception으로 포장하는데 사용
원인 예외를 다루기 위한 메소드
- initCause()
- 지정된 예외를 원인 예외로 등록, 즉 연결하는 메소드
- getCause()
- 원인 예외를 반환하는 메소드
실질적인 예외 처리 방법
- 예외 복구
- 실제로 try-catch문을 사용해서 정상 상태로 복구하는 방식
- 기본적이나 현실적으로 불가능하여 자주 사용되지 않는다.
- 예외 처리 회피
- 예외를 그대로 흘려보낸다. 즉 예외를 처리하지 않고 다른 객체로 보낸다.
- 예외 전환
- 예외가 발생했을 때 조금 더 적절한 예외를 던져주는 경우
- 예외처리에 더 신경쓰는 경우나 RunTimeException처럼 일괄적으로 처리하기 편한 예외로 바꾸고 싶을 때 사용
'Today I Learned' 카테고리의 다른 글
| Thead (1) | 2025.01.07 |
|---|---|
| Generic (0) | 2025.01.06 |
| 객체지향 프로그래밍 이란? (1) | 2025.01.02 |
| 컬랙션이란? (0) | 2025.01.02 |
| JAVA란? (2) | 2024.12.31 |