Java 기초 예외처리: 반드시 알아야 할 개념과 실전 가이드
KUKJIN LEE • 2개월 전 작성
Java에서 예외 처리(Exception Handling)는 오류가 발생할 수 있는 상황을 적절히 관리하고 프로그램의 비정상 종료를 방지하기 위해 필수적으로 알아야 할 개념입니다.
1. 예외(Exception)란 무엇인가?
예외는 프로그램 실행 중 발생할 수 있는 예기치 않은 상황을 의미합니다. 예를 들어, 파일을 읽으려 할 때 파일이 존재하지 않거나, 배열의 인덱스가 범위를 벗어나거나, 0으로 나누기를 시도하는 경우 등이 있습니다. 이러한 예외 상황이 발생하면 Java는 기본적으로 프로그램을 종료시키지만, 예외 처리를 통해 이를 적절히 관리할 수 있습니다.
-
Checked Exception: 컴파일러가 예외 처리를 강제하는 예외입니다. 예를 들어, 파일 입출력 작업 중 발생할 수 있는
IOException
이 이에 해당합니다. 반드시try-catch
블록이나throws
키워드를 통해 처리해야 합니다. -
Unchecked Exception: 컴파일러가 예외 처리를 강제하지 않는 예외입니다. 주로 프로그래머의 실수로 발생하는 런타임 예외들이며, 대표적으로
NullPointerException
,ArrayIndexOutOfBoundsException
등이 있습니다. 이러한 예외는 개발자가 필요에 따라 처리할 수 있습니다.
3. 예외 처리 기본 문법
Java에서 예외 처리는 주로 try-catch
블록을 사용하여 이루어집니다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외가 발생했을 때 처리할 코드
} finally {
// 선택 사항: 예외 발생 여부와 상관없이 항상 실행될 코드
}
-
try 블록: 예외가 발생할 수 있는 코드를 작성합니다.
-
catch 블록: 예외가 발생했을 때 해당 예외를 처리하는 코드를 작성합니다. 하나의 try 블록에 여러 개의 catch 블록을 사용할 수 있으며, 다양한 예외를 처리할 수 있습니다.
-
finally 블록: 선택적으로 사용할 수 있으며, 예외 발생 여부에 상관없이 항상 실행되는 코드입니다. 주로 자원 해제(예: 파일 닫기, 데이터베이스 연결 해제) 목적으로 사용됩니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FinallyExample {
public static void main(String[] args) {
Scanner scanner = null;
try {
File file = new File("example.txt");
scanner = new Scanner(file);
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
} finally {
if (scanner != null) {
scanner.close();
}
System.out.println("finally 블록이 실행되었습니다.");
}
}
}
예외 던지기 (throw
키워드)
Java에서는 프로그래머가 의도적으로 예외를 발생시킬 수 있습니다. 이는 throw
키워드를 사용하여 특정 조건에서 예외를 강제로 던지는 방식입니다.
public class ThrowExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (IllegalArgumentException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void validateAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("나이는 18세 이상이어야 합니다.");
}
}
}
나이가 18세 미만일 경우 IllegalArgumentException을 발생시킵니다.
try, catch
, throw
를 활용하면 다양한 예외 처리를 구현할 수 있고 예상하지 못한 상황에서 안전하게 동작할 수 있도록 설계할 수 있습니다.