[Day 8 | Java] Exception

y♡ding·2024년 10월 23일
0

데브코스 TIL

목록 보기
41/163

Exception

1. 예외(Exception)란?

  • 예외는 프로그램 실행 중 발생하는 비정상적인 상황을 의미합니다. 예를 들어, 배열 인덱스 초과, 파일을 찾을 수 없음, null 값을 참조하려고 할 때 발생하는 오류 등이 예외입니다.
  • 예외가 발생하면 프로그램의 정상적인 흐름이 깨질 수 있으므로, 예외를 처리해야 프로그램이 정상적으로 종료되거나 안정적으로 실행됩니다.

예외 vs 에러

  • 예외(Exception): 연산오류, 포맷오류 등 상황에 따라 개발자가 해결 가능한 오류
  • 에러(Error): JVM 자체의 오류로 개발자가 해결할 수 없는 오류

1. Exception (기본 예외 클래스)

  • ClassNotFoundException
  • InterruptedException
  • IOException
  • FileNotFoundException
  • CloneNotSupportedException
  • 기타 예외들(…)

2. RuntimeException (실행 시 발생하는 예외)

  • ArithmeticException
  • ClassCastException
  • IndexOutOfBoundsException
  • NumberFormatException
  • NullPointerException
  • 기타 예외들(…)

Exception 클래스는 모든 예외의 최상위 클래스이며, 그 하위에 여러 구체적인 예외들이 위치하고 있습니다. 이 중 일부 예외는 컴파일 시점에 처리해야 하고(checked exceptions), 다른 예외는 실행 시점에 발생하며 컴파일러에서 강제하지 않는 경우도 있습니다(unchecked exceptions).

if문을 사용한 예외 방지

if문을 사용하여 예외 상황을 처리하는 방법은 프로그램이 예외를 발생시키지 않고, 조건을 확인하여 예외가 발생할 가능성이 있는 상황을 미리 처리하는 방식입니다
예를 들어, 숫자를 0으로 나누는 오류는 미리 조건을 확인하여 방지할 수 있습니다.

public class DivisionExample {
    public static void main(String[] args) {
        int numerator = 10;
        int denominator = 0;

        // if 문을 사용하여 0으로 나누는 예외를 방지
        if (denominator != 0) {
            int result = numerator / denominator;
            System.out.println("결과: " + result);
        } else {
            System.out.println("분모는 0일 수 없습니다.");
        }
    }
}

2. 예외의 종류

자바에서 예외는 크게 두 가지로 나뉩니다.

1. Checked Exception (검사된 예외):

* 컴파일러가 예외 처리를 강제하는 예외입니다.

  • 예외가 발생할 가능성이 있는 코드는 반드시 try-catch로 처리하거나, throws 키워드를 사용해 호출하는 메서드에 예외 처리를 위임해야 합니다.
  • 예시: IOException, SQLException, FileNotFoundException

2. Unchecked Exception (검사되지 않은 예외):

  • 런타임에 발생하는 예외로, 컴파일러가 예외 처리를 강제하지 않습니다.
  • 주로 프로그래머의 실수로 발생하며, 논리적인 오류잘못된 입력이 원인이 됩니다.
  • 예시: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

3. 예외 처리 구문 (try-catch-finally)

자바에서 예외를 처리하는 기본 구문은 try-catch-finally 블록입니다.

  • try 블록: 예외가 발생할 가능성이 있는 코드를 작성합니다.
  • catch 블록: 예외가 발생하면 처리하는 코드를 작성합니다. 예외가 발생했을 때 해당 예외를 처리합니다.
  • finally 블록: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. 주로 자원 해제(예: 파일 닫기, 데이터베이스 연결 해제)에 사용됩니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ExceptionExample {
    public static void main(String[] args) {
        Scanner scanner = null;
        try {
            // 파일 읽기 시도 (Checked Exception 발생 가능)
            File file = new File("nonexistentfile.txt");
            scanner = new Scanner(file);

            // 파일 내용 읽기
            while (scanner.hasNext()) {
                System.out.println(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            // 파일이 존재하지 않을 때 예외 처리
            System.out.println("파일을 찾을 수 없습니다.");
        } finally {
            // 자원 해제
            if (scanner != null) {
                scanner.close();
            }
            System.out.println("자원 해제 완료.");
        }
    }
}

0개의 댓글

관련 채용 정보