예외 처리란?

·2025년 5월 18일

Power Java

목록 보기
48/75

8.10 예외 처리란?

예외(exception)
: exceptional event의 약자.
-일반적인 경우, 오류가 발생하면 프로그램이 종료된다.
그러나 무조건 종료하는 것보다 프로그램에서 오류를 감지하여 자연스럽게 프로그램을 종료하거나, 오류를 처리한 후에 계속 실행할 수 있도록 만드는 것이 좋다.

< 예외 발생 예제 >

정수를 0으로 나누는 경우.
-> ArithmeticException이라는 이름의 예외가 발생함.

*버그와 예외
실행 도중에 버그로 인해서도 실행 오류가 발생할 수 있으나, 이러한 버그는 개발 과정에서 모두 수정되어야 함.
자바에서는 버그에 의한 실행 오류도 예외로 취급하지만, 진정한 의미에서의 예외가 아님.
(=>존재해야 할 파일이 없거나 인터넷 서버가 다운된 경우)

try-catch 구조

try {
	// 예외가 발생할 수 있는 코드
} catch (예외 클래스 변수) {
	// 예외를 처리하는 코드
}
finally {
	// try 블록이 끝나면 무조건 실행되는 코드; 생략 가능
}

-예외마다 하나의 catch 블록을 지정하여야 함.

< 0으로 나누는 예외 처리 >

import java.util.Scanner;

public class DivideByZeroOK {
	public static void main(String[] args) {
    	try {
        	int result = 10 / 0;	// 예외 발생
        } catch (ArithmeticException e) {
        	System.out.println("0으로 나눌 수 없습니다.");
        }
        System.out.println("프로그램은 계속 진행됩니다.");
    }
}
실행결과
0으로 나눌 수 없습니다.
프로그램은 계속 진행됩니다.

< 예외의 종류 >


1) Error
2) RuntimeException
3) 나머지 예외 (checked exception)

  • 비체크 예외
  1. Error
    : 자바 가상 기계 안에서 치명적인 오류가 발생하면 생성된다.
    -예측, 복구 불가능
    -예외처리의 대상이 아님. (컴파일러 체크X)
  2. RuntimeException
    : 프로그래밍 버그나 논리 오류에서 기인한다.
    -예외처리의 대상이 아님. (컴파일러 체크X)
  • 체크 예외
  1. 나머지 예외
    -예측, 복구 가능.
    -반드시 예외 처리 하여야 함.
    => 예외처리 하지 않으면 컴파일 오류 발생.

Try-With-Resource

= 자동 리소스 관리 (Java 7 도입)
: try catch 블록 내에서 사용되는 리소스를 자동으로 닫는다.

•방법
: try 괄호 안에 필요한 리소스를 선언하기만 하면 된다.
-생성된 리소스는 블록의 끝에서 자동으로 닫힌다.

import java.io.*;

public class TryTest {
	public static void main(String args[]) {
    	try (FileReader fr = new FileReader("test.txt")) {		// 괄호가 있으면 자원으로 취급
        	char[] a = new char[50];
            fr.read(a);
            for (char c : a)
            	System.out.print(c);
        } catch (IOException e) {
        	e.printStackTrace();
        }
    }
}

-FileReader 객체가 try-with-resource 문장 안에 선언되었으므로, 해당 리소스는 블록 끝에서 무조건 닫힘.

*이 기능을 사용하려면 java.lang.AutoCloseable 인터페이스를 구현하여야 함. Java SE 7 버전부터 FileReader 클래스는 이 인터페이스를 구현하고 있음.

< 예외를 떠넘기기 >

-예외를 바로 처리하지 않으려면 메소드 정의에 "throws"로 표시하여야 한다.

하위 메소드 => 상위 메소드

: 서브 메소드 -> 메인 메소드 -> JVM

*try와 catch 블록은 별도의 독립된 블록.



1. 프로그램 실행 중에 잘못된 동작이 발생했을 때.
2.
1) 처리
: 사용자가 오류를 인지하고 적절히 대처 가능.
2) 처리X
: 프로그램이 곧바로 종료됨.
3. 프로그램이 계속 실행될 수 있어 프로그램의 안정성을 높임.
4.
1) try 블록 내부
2) catch 블록 내부
5.

import java.util.*;

try {
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();  // 문자열 입력 시 예외 발생
} catch (InputMismatchException e) {
    System.out.println("정수를 입력해야 합니다.");
}
try {
    int[] arr = new int[10];
    arr[10] = 5;  // 예외 발생
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("배열 인덱스를 벗어났습니다.");
}
  1. Error : JVM에서 발생.
    RuntimeException : 프로그래밍 실수로 발생.
  2. Checked Exception : 컴파일러가 강제로 예외 처리나 예외 던지기를 요구함.
  3. 비체크 예외이기 때문.
  4. 예외 처리나 예외 던지기
public void method() throws IOException {
    // 예외 발생 코드
  1. 해당 메소드가 예외를 발생시킬 수 있으며, 호출한 쪽에서 예외를 처리해야 함을 명시하는 키워드.

0개의 댓글