예외처리 (Exception) try ~ catch

2024. 10. 20. 10:44java

에러(error):

 

  • 시스템 에러: 컴퓨터의 오작동으로 인해 발생하는 에러
  • 컴파일 에러: 프로그램 실행 전 소스코드상의 문법적인 문제로 발생하는 에러
  • 런타임 에러: 프로그램 실행 중 발생하는 에러 문법적으로는 문제가 없는데 발생
    → 개발자가 예측 가능한 경우 처리하지 않았을 때 발생!
  • 논리적 에러: 소스 코드 상 문제도 없고, 실행했을 때도 문제가 발생하지 않음
    (로지컬 에러) 다만, 의도와는 다르게 동작함 (기획/설계를 잘 못 했을 때)

 

프로그램 실행 시 발생하는 예외 (RuntimeException) 

예외 종류 에러 발생 원인
NullPointException 주소값 객체 참조 에러 (Null 값 참조)
IOException 입출력 에러 (파일 없음, 접근불가 등)
OutOfMemoryException 메모리 부족
ArithmeticException 나누기 연산 0으로 나눌 경우
ArrayIndexOfBoundsException 배열 index 범위 초과
NumberFormatException 문자열을 숫자 변환시 발생
ClassCastException 허용할 수 없는 형변환 진행
IllegalArgumentException 인자 오류
NegativeArraySizeException 배열 크기가 음수

 

 

[ 예외처리 방법 ]

: try ~ catch 문


[ 표현법 ]

try {
(num1 / num2)                                               → 예외가 발생할 법한 구문

catch(발생할예외클래스명  변수명) {                → 매개변수

}

 

try {

 

System.out.println("나눗셈 결과: " + (num1 / num2));

 

System.out.println("올바른 정수값이 입력되었습니다.");

 

} catch(ArithmeticException e) {

 

e.printStackTrace();                        // 어디서 어떻게 예외가 발생해서 오류발생했는지 확인 가능함

}

 

System.out.println("프로그램 종료");

 

}

 

 

public void method1() { // 다중 catch문: try하고 catch 계속 넣을 수 있음.

 

Scanner sc = new Scanner(System.in);

 

System.out.println("정수를 입력해주세요. (0은 제외) > ");

try {

 

int num = sc.nextInt();

// InputMismatchException

System.out.println("100을 입력한 정수로 나눈 결과: " + (100 / num));

// ArithmeticException

 

} catch(InputMismatchException e) { // 1. 먼저 입력받은 값이 정수인지 판단

System.out.println("숫자로 된 정수값만 입력해주세요");

} catch(ArithmeticException e) {

System.out.println("0입력하지 말아주세요");

}

 

System.out.println("프로그램 종료");

}