본문 바로가기
Language/Java

[Java] 예외 Exception

Writer mintparc 2019. 10. 2.

예외 Exception


예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다. 자바에서는 이러한 원치 않는 종료를 방지하기 위해 예외처리를 할 수 있다. 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

 

 

 

일반예외 Checked Exception


  • 컴파일러 체크 예외
  • 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일 하는 과정에서 해당 예외 처리 코드가 있는 지 검사한다.
  • 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다. 

 

 

실행예외 Runtime Exception


  • 컴파일러 넌 체크 예외
  • 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일 하는 과정에서 예외 처리 코드가 있는 지 검사하지 않는다.
  • 만약 개발자가 실행 예외에 대해 예외 처리코드를 넣지 않았을 경우, 해당 예외가 발생하면 프로그램이 종료된다.

 

 

예외클래스 Exception Class


  • 일반예외와 실행예외 클래스는 RuntimeException 클래스를 기준으로 구별한다.
  • RuntimeException의 하위 클래스가 아니면 일반 예외 클래스이고, 하위클래스이면 실행 예외 클래스이다.

 

 

예외처리 try ~ catch


  • 예외가 발생하지 않는 다면 catch 블록은 실행되지 않는다.
  • try 블록에서 예외가 발생했을 경우 catch 블록이 실행된다.
  • .close가 필요한 코드를 try 블록 안에 위치시키면 자동으로 종료시켜준다.

 

 

예외떠넘기기 throws


 

  • 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 메소드를 호출한 곳으로 떠넘기는역할을 한다.
  • throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열하면 된다. 

 

 

명시적 오류처리 throw


  • throws와 throw를 잘 구분하자.
  • 일반적으로는 시스템이 적절한 예외 클래스를 자동으로 생성하여 처리를 담당하지만, 명시적으로 특정 예외 클래스를 생성하여 예외처리를 할 수도 있다.
  • 기존의 예외 클래스로 예외 처리를 할 수 없다면 사용자만의 예외클래스를 작성하여 예외를 발생시킬 수 있다.
  • 사용자가 예외클래스를 정의 하려면, 최상위 클래스인 java.lang.Exception을 상속받아 작성한다.

 

public class Test {
	public static void main(String[] args) {
		int a = 0;

		// 1 ~ 9 숫자가 아니면 예외를 발생시키기
		try {
			System.out.println("1 ~ 9 사이의 숫자를 입력해주세요.");
			Scanner sc = new Scanner(System.in);
			a = sc.nextInt();

			if (a <= 0) {
				throw new MyTest("범위를 벗어났습니다.");
			}
			if (a > 9) {
				throw new MyTest("범위를 벗어났습니다.");
			}

		} catch (MyTest m) {
			m.printStackTrace();
		}
		
		System.out.println(a);

	}
}

Test 라는 클래스에서 1 ~ 9 까지의 숫자를 입력받아야 하는 상황이 생겼다. 1 ~ 9 이외의 숫자를 입력하면 예외를 발생시키고 싶다고 한다면, 사용자 예외 클래스를 사용할 수 있다.

 

public class MyTest extends Exception {
	
	public MyTest(String message) {
		super(message);
	}
}

Exception 클래스를 상속받은 MyTest 라는 사용자 예외 클래스를 만들어서, throw new MyTest 로 객체를 생성해주었다. 그리고 원하지 않는 숫자를 입력해주었을 때, 프로그램이 종료되지 않고 "범위를 벗어났습니다." 라는 문장이 출력되도록 했다.

 

댓글