Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

예외 처리! 본문

Today I Learned

예외 처리!

seaking110 2025. 1. 3. 11:57

오류 (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