Java -Error vs Exception (throw&throws)

백엔드류·2024년 2월 9일

Java

목록 보기
2/6

Error & Exception


  • Error : 일반적으로 프로그래머가 처리할 수 없는 심각한 오류 , 컴파일 시점에 체크 불가능, 발생하면 프로그램은 비정상 종료되며 예측 불가능한 UncheckedException에 속한다 ex) 메모리 부족, 스택 오버플로우 등

  • Exception : Error보다 비교적 경미한 오류이며, try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있다.

CheckedException vs UncheckedException

  • CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야한다. 컴파일러가 체크하는 예외이기 떄문에 반드시 예외 처리해야한다.
    ex) IOException , ClassNotFoundException

  • UncheckedException은 실행하고 난 후에 알 수 있는 예외를 마하고, 따로 예외처리를 하지않아도 된다. 주로 프로그래머의 실수나 프로그램의 오류로 발생하는 예외이므로 예기치 않은 상황에서 발생 가능하며, 코드 상에서 사전에 예측하기 어렵다.
    ex) NullPointerException, ArrayIndexOutOfBoundException 등



throw vs throws

  • throw는 예외를 직접 발생시키는 데 사용됩니다.
    메소드나 블록 내에서 예외를 생성하고 해당 예외를 호출자에게 던질 때 사용됩니다.
    일반적으로 사용자가 직접 예외를 생성하고 던질 때, 또는 특정 조건이 충족될 때 예외를 발생시키는 데 사용됩니다.

  • throws는 메소드 선언부에서 사용되며, 해당 메소드가 어떤 예외를 던질 수 있는지 명시합니다.
    메소드가 특정 예외를 발생시킬 수 있다는 것을 호출자에게 알리는 역할을 합니다.
    메소드에 throws를 사용하면 해당 메소드를 호출할 때 예외 처리를 강제하게 됩니다. 호출하는 쪽에서 예외 처리를 해야 합니다.

package study; 
public class MyException extends Exception { 
	
    public MyException() {        
		super("내가 만든 예외");    
	}
}
package study; 
public class ExceptionTest {     
	static void callException() throws MyException {    
		throw new MyException();    
	}    

	public static void main(String[] args) {   
		try {            
			callException();        
		}catch (MyException e) { 	
        	System.out.println(e.getMessage());     
		}finally {    	
			System.out.println("시스템 종료");        
		}    
	}
}

실행결과 : 내가 만든 예외
		  시스템 종료
          Process finished with exit code 0


//코드출처: https://dev-coco.tistory.com/18 [슬기로운 개발생활:티스토리]
profile
공부한 내용을 정리한 블로그입니다 & 백엔드 개발자

0개의 댓글