Error와 Exception

밀크야살빼자·2024년 3월 18일
0

Error

시스템에 비정상적인 상황이 생겼을 때 발생합니다. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류입니다. 따라서 개발자가 미리 예측하여 처리할 수 없기 때문에, 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 됩니다.

Exception

개발자가 구현한 로직에서 발생합니다. 즉, 예외는 발생할 상황을 미리 예측하여 처리할 수 있습니다. 따라서 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는 것이 중요합니다.

예외 클래스

모든 예외 클래스는 Throwable 클래스를 상속받고 있으며, Throwable은 최상위 클래스 Object의 자식 클래스입니다.

Throwable을 상속받는 클래스는 Error와 Exception이 있습니다. Error는 시스템 레벨의 심각한 수준의 에러이기 때문에 시스템에 변화를 주어 문제를 처리해야 하는 경우가 일반적입니다. 반면에 Exception은 개발자가 로직을 추가하여 처리할 수 있습니다.

Exception은 수많은 자식클래스를 가지고 있습니다. 그 중 RuntimeException을 주목해야 합니다. RuntimeException은 CheckedException과 UncheckedException을 구분하는 기준입니다. Exception의 자식 클래스 중 RuntimeException을 제외한 모든 클래스는 CheckedException이며, RuntimeException과 그의 자식 클래스들을 Unchecked Exception입니다.

UnCheckedExceptionCheckedException
클래스RuntimeException 클래스와 자손 클래스Exception 클래스 자손 중 RuntimeException 제외한 모든 클래스
확인 시점실행 단계컴파일 단계
강제 처리여부처리를 강제하지 않음반드시 예외처리를 해야 함
예외 발생시 트랜잭션 처리rollback 함rollback 하지 않음
대표예외- NullPointException
- IllegalArgumentException
- IOException
- SQLException

예외 처리 장단점

장점

  • 프로그램의 안정성이 향상됩니다.
  • 예외 발생 시 시스템의 중단을 방지하고 정상적인 실행을 유지할 수 있습니다.
  • 유지보수와 디버깅이 쉬워집니다.

단점

  • 예외처리는 코드의 가독성을 떨어뜨릴 수 있습니다.
  • 예외가 로직에 많이 들어가면 성능상 많이 느려집니다.

예외 처리

  1. 예외 복구

    • 일정 시간 대기하고 로직을 다시 실행하는 방법입니다.
    • 최대로 시도할 횟수를 정하고, 최대 회수를 채울때까지 반복합니다. 만약 최대 회수를 넘는다면 예외가 발생합니다.
    • try-catch의 catch에서 예외를 처리하지 않고, 일정 시간 대기합니다.
    public void exception(){
    	final int MAX_COUNT = 5;
    	int tryCount = MAC_COUNT;
    
    	while(tryCount < MAX_COUNT){
    		try {
    			
    			return;
    		}catch(Exception e){
    
    		}finally{
    
    		}
    	}
    	throw new RuntimeException();
    }
  1. 책임 회피

    • 현재 발생한 예외를 내가 처리하지 않고 호출한 쪽으로 책임을 회피하는 방법입니다.
    • 메서드명 앞에 throws를 붙입니다.
    • 다른 곳에서 예외를 처리할 수 있는 장치를 마련하고 사용해야 안전합니다.
    public void responsibility() throws FileNotFoundException {
    	BufferedReader br = new BufferedReader(new FileReader(""));
    }
  1. 예외 전환

    • 예외가 발생 했을 때, 다른 예외를 던집니다.
    • 내가 의도한 다른 예외를 발생시킵니다.
    • CheckedException에서 UncheckedException을 발생시키면, 예외 전파를 막을 수 있습니다.
    public void exception(){
    	if(/*이메일이 이미 존재*/){
    		throw new exception();
    	}
    }

참고 자료

profile
기록기록기록기록기록

0개의 댓글