Java에서 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 처리하기 위한 중요한 메커니즘입니다. 이를 통해 프로그램의 안정성을 높이고, 예기치 못한 상황에서도 정상적으로 작동하도록 만들 수 있습니다. 이번 글에서는 try, catch, throw 키워드를 사용하여 Java에서 예외를 처리하는 방법과 그 원리를 알아 보겠습니다.
1. 예외(Exception)란?
예외란 프로그램 실행 중 예기치 않은 상황이나 오류가 발생했을 때 이를 나타내는 객체입니다. 예외는 크게 두 가지로 나뉩니다
- Checked Exception
- 컴파일 시점에 처리해야 하는 예외입니다.
- 예:
IOException
,SQLException
- Unchecked Exception:
- 런타임 시점에 발생하는 예외입니다.
- 예:
NullPointerException
,ArrayIndexOutOfBoundsException
2. 예외 처리 기본 구조
Java에서 예외 처리는 주로 try
, catch
, finally
, throw
, throws
키워드를 사용하여 이루어집니다.
기본 구조
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외가 발생했을 때 처리할 코드
} finally {
// (선택적) 항상 실행되는 코드
}
3. 예외 처리 예제
- 파일 읽기 예제
import java.io.*;
public class ExceptionExample {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("example.txt");
BufferedReader br = new BufferedReader(reader);
System.out.println(br.readLine());
br.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다: " + e.getMessage());
}
}
}
출력: (파일이 없는 경우)
파일을 읽는 중 오류가 발생했습니다: example.txt (No such file or directory)
- ArithmeticException 처리
public class DivideByZeroExample {
public static void main(String[] args) {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
}
}
}
출력
0으로 나눌 수 없습니다: / by zero
4. throw와 throws
- throw 키워드
- 특정 조건에서 예외를 강제로 발생시킬 때 사용합니다.
예제:
public class ThrowExample {
public static void main(String[] args) {
try {
checkAge(15);
} catch (IllegalArgumentException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("나이는 18세 이상이어야 합니다.");
}
}
}
출력
예외 발생: 나이는 18세 이상이어야 합니다.
- throws 키워드
- 메서드가 호출자에게 예외를 던질 수 있음을 명시합니다.
예제
import java.io.*;
public class ThrowsExample {
public static void main(String[] args) throws IOException {
readFile("example.txt");
}
public static void readFile(String fileName) throws IOException {
FileReader reader = new FileReader(fileName);
BufferedReader br = new BufferedReader(reader);
System.out.println(br.readLine());
br.close();
}
}
5. finally 블록
finally
블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 리소스를 해제하거나 정리하는 작업에 사용됩니다.
예제
public class FinallyExample {
public static void main(String[] args) {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과: " + e.getMessage());
} finally {
System.out.println("예외 처리 종료.");
}
}
}
출력
배열 인덱스 초과: Index 5 out of bounds for length 3
예외 처리 종료.
6. 예외 처리의 장점
- 프로그램 안정성 증가
- 예외 처리 없이 프로그램이 멈추는 것을 방지합니다.
- 문제의 원인 파악 용이
- 적절한 예외 메시지를 제공하여 문제 해결에 도움을 줍니다.
- 코드 유지보수성 향상
- 예외 처리를 통해 오류가 발생할 가능성이 있는 부분을 명확히 분리할 수 있습니다.
결론
Java에서의 예외 처리는 안정적이고 유지보수 가능한 프로그램을 개발하는 데 필수적인 요소입니다. try
, catch
, throw
와 같은 키워드를 적절히 활용하여 예외를 처리하고, 예외 상황에서도 프로그램이 정상적으로 작동할 수 있도록 설계해 보세요. 예외 처리를 통해 코드의 품질을 한 단계 업그레이드가 될 수 있습니다.
다음시간에는 Java 컬렉션 프레임워크 완벽 가이드: List, Set, Map의 차이점에 대해 알아 보겠습니다. 감사합니다.