예외 처리

DONI·2021년 9월 23일
0

Java

목록 보기
38/46
post-thumbnail

🏹 프로그램 오류의 종류

  1. 컴파일 에러 : 소스코드 상의 문법 에러
  2. 런타임 에러 : 프로그램 실행 중 발생하는 에러로, 주로 if문으로 처리함
    예) 배열의 인덱스 범위를 벗어남
  3. 시스템 에러 : 컴퓨터 오작동으로 인한 에러
    (소스코드 수정으로 해결 불가)

🏹 오류 해결 방법

  • 예외 (Exception) : 소스코드 수정으로 해결 가능한 에러 (= 예측 가능한 에러)
    Java API Document에서 해당 클래스에 대한 생성자, 메서드를 검색하여
       발생할 수 있는 예외를 미리 확인하고, 예외 처리 구문을 통해 해결!

     🔍 Shift + F2 → Java API 문서 페이지에서 검색


🏹 예외 클래스 계층 구조

  • Checked Exception : 반드시 예외 처리를 해야 하는 경우
  • Unckecked Exception : 예외 처리를 하지 않아도 되는 경우

  ⭐ 모든 예외 클래스의 부모 클래스는 java.lang.Exception 클래스이다!


🏹 RuntimeException 클래스

Unchecked Exception으로, 주로 프로그래머의 부주의로 인한 오류
예외 처리보다는 코드를 수정해야 하는 경우가 많음

  • RuntimeException 자식 클래스

    종류설명
    ArithmeticException0으로 나누기 연산을 진행하려는 경우
    InputMismatchExceptionScanner를 사용하여 데이터 입력 시 입력 받는 자료형이 불일치할 경우
    NullPointerException참조변수가 참조하려는 객체가 Null일 경우

🏹 예외 처리 방법 1 - try ~ cahch문

  • try : 예외가 발생할 가능성이 있는 코드를 작성하는 부분

  • catch : try 구문에서 예외 발생 시 해당하는 예외 상황에 대한 처리를 작성하는 부분
             여러 개의 예외 처리가 가능하지만 Exception 간의 상속 관계를 고려해야 함
             (매개변수의 다형성)

  • finally : 예외 발생 여부와 관계 없이 무조건 실행되어야 하는 코드를 작성하는 부분
               주로 java.io나 java.sql 패키지의 메서드를 처리할 때 이용

🏹 예외 처리 방법 2 - throws

  • 메서드 선언 시 throws Exception명 을 추가하여 호출한 상위 메서드로 예외를 던짐 (위임)
    • throw : 예외를 강제로 발생시키는 구문

🏹 사용자 정의 예외

  • Java API에서 제공하는 Exception Class만으로 처리할 수 없는 예외가 있을 경우
    사용자의 필요에 의해 Exception Class를 생성

🚩 소스코드

public int inputNumber(int i) {
	Scanner sc = new Scanner(System.in);

	int num;
		while (true) {
		System.out.print(i + "번째 정수 입력 : ");
		try {
			num = sc.nextInt();
			// 다음 정수를 입력 받아 얻어와야 하지만
			// 실수 또는 다른 자료형을 입력했을 때
			// InputMismatchException 발생
		break;
		
		} catch (InputMismatchException e) {
			System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
			sc.nextLine();
			// 입력 버퍼에 남아있는 잘못 입력된 값을 제거해줌으로써
			// 다음 정수 입력 시 문제가 발생하지 않도록 함
		}			
	}
	
	return num;		
}
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글