[Java] 65. 예외 처리

백하림's avatar
Feb 17, 2025
[Java] 65. 예외 처리
notion image

1. ArithmeticException (0으로 나누기)

package ex15; public class DivideByZeroOk { public static void main(String[] args) { try { int result = 10 / 0; System.out.println(result); } catch (ArithmeticException e) { System.out.println("괜찮아 : " + e.getMessage()); } } }
notion image
설명
  • 10 / 0 연산을 수행하면 ArithmeticException 이 발생합니다.
  • catch 블록에서 예외를 잡아 "괜찮아 : / by zero"라는 메시지를 출력하며 프로그램이 멈추지 않고 정상적으로 실행됩니다.
예외 처리는 예상치 못한 오류를 방지하고 프로그램의 안정성을 높이는 중요한 기능입니다.

2. InterruptedException

package ex15; public class Check01 { public static void main(String[] args) { System.out.println("시작"); try { Thread.sleep(5000); } catch (InterruptedException e) { System.out.println("도중에 꺼졌는데 괜찮아"); } System.out.println("끝"); } }
notion image
설명
  • Thread.sleep()은 일정 시간 동안 현재 스레드를 멈추는 기능을 합니다.
  • 실행 중 다른 스레드가 인터럽트(Interrupt) 를 걸면 InterruptedException 이 발생합니다.
  • 예외를 catch 블록에서 처리하여 프로그램이 비정상 종료되지 않도록 합니다.

3. FileNotFoundException

package ex15; import java.io.FileNotFoundException; import java.io.FileReader; public class Check02 { public static void main(String[] args) { try { FileReader fileReader = new FileReader("C:/hello/good.txt"); } catch (FileNotFoundException e) { System.out.println("파일을 내가 직접 C:/hello/good.txt 생성"); } } }
notion image
설명
  • FileReader를 사용하면 특정 경로의 파일을 읽을 수 있습니다.
  • 파일이 존재하지 않으면 FileNotFoundException 이 발생합니다.
  • 예외를 잡아 "파일을 내가 직접 C:/hello/good.txt 생성" 같은 메시지를 출력하여 프로그램이 비정상 종료되지 않도록 합니다.

4. ArithmeticException을 활용한 최대공약수(GCD) 계산

package ex15; public class Run01 { public static int gcd(int a, int b) { //if (b == 0) return a; try { return gcd(b, a % b); } catch (ArithmeticException e) { return a; } } public static void main(String[] args) { int r = gcd(10, 20); // [1,2,5,10], [1,2,4,5,10,20] System.out.println(r); } }
notion image
설명
  • 유클리드 호제법을 사용하여 최대공약수를 구합니다.
  • 일반적으로 if (b == 0) return a; 로 처리하지만,여기서는 a % b == 0일 때 ArithmeticException 을 발생시키고 catch 블록에서 결과를 반환합니다.

5. throw를 사용한 예외 강제 발생

package ex15; public class Try01 { public static void main(String[] args) { throw new ArithmeticException("강제로 만든 익셉션"); // throw new ~ 하면 강제로 터트릴 수 있음. } }
notion image
설명
  • throw new ArithmeticException("강제로 만든 익셉션");ArithmeticException
    • 직접 발생시켜 프로그램이 강제 종료됩니다.
  • throw 키워드를 사용하면 임의의 시점에서 예외를 발생 시킬 수 있습니다.
  • 이 방식은 사용자 정의 예외 처리, 유효성 검사, 예외 테스트 등에 활용될 수 있습니다.

6. RuntimException 위임 및 처리

package ex15; class A { static int start(boolean check) { int r = B.m1(check); return r; } } class B { static int m1(boolean check) { if (check) { return 1; } else { throw new RuntimeException("false 오류남"); } } } public class Try02 { public static void main(String[] args) { try { int r = A.start(false); System.out.println("정상 : " + r); } catch (Exception e) { System.out.println("오류 처리 방법 : " + e.getMessage()); } } }
notion image

설명

  • B.m1(false)가 실행되면서 false일 경우 RuntimeException 을 발생시킵니다.
  • 예외가 A.start(false)를 거쳐 main까지 전파됩니다.
  • try-catch 블록이 없었다면 프로그램이 비정상 종료되었겠지만,catch 블록에서
    • "오류 처리 방법 : false 오류남" 을 출력하며 프로그램을 정상적으로 유지합니다.
Share article

harimmon