오류와 예외

Java의 데이터 타입과 예외

Jim White

Java Developer

예외 vs 오류

  • Error는 심각한 문제입니다
  • 애플리케이션은 오류를 처리·복구할 수 없습니다
    • 오류가 나면 애플리케이션이 중단됩니다
    • 예: Java에서 메모리 부족은 오류입니다
  • 예외는 애플리케이션이 처리·복구할 수 있습니다
    • 배열 크기를 벗어난 접근 시도는 예외입니다.
Java의 데이터 타입과 예외
오류 예시
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Java의 데이터 타입과 예외

예외의 두 종류

체크 예외 런타임(비검사) 예외
처리 필요 아니오
일반 원인 통제 불가 요인 프로그래밍 실수
복구 예상하면 대체로 가능 대개 불가
복구 방식 try/catch 또는 throws 예방 코딩이 최선
예시 파일을 찾을 수 없음 배열 인덱스 범위 초과
Java의 데이터 타입과 예외

체크 예외와 런타임 예외

  • Exception의 하위 클래스 중 RuntimeException이 아닌 것은 체크 예외입니다
    • 반드시 처리해야 합니다
    • 예: 파일 없음(FileNotFoundException)
  • RuntimeException은 모든 비검사 예외의 상위 클래스입니다
    • 처리 요구 없음
    • 예: 존재하지 않는 배열 인덱스 접근(IndexOutOfBoundsException)
    • 예: 0으로 나누기 시도(ArithmeticException)
Java의 데이터 타입과 예외

RuntimeException

RuntimeException 하위 클래스 언제 발생하는가
ArithmeticException 0으로 나누기 등 잘못된 산술 연산
IndexOutOfBoundsException 배열, 문자열 등의 인덱스가 범위를 벗어남
NegativeArraySizeException 음수 크기의 배열 생성 시도
int y = 5/0; // ArithmeticException 발생 코드
int[] list = new int[-1];  //NegativeArraySizeException 발생 코드
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Java의 데이터 타입과 예외

체크 예외("Checked")

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Java의 데이터 타입과 예외

Laten we oefenen!

Java의 데이터 타입과 예외

Preparing Video For Download...