Try-Catch와 Exception 종류
try-catch
구문을 사용할 때, Java에서는 다양한 종류의 예외(Exception
)를 처리할 수 있습니다. 여기에서는 자주 사용되는 예외 클래스들과 그 의미를 설명합니다.
1. NullPointerException
설명: 객체가 null
인 상태에서 해당 객체의 메서드를 호출하거나 필드에 접근할 때 발생합니다.
String text = null;
try {
System.out.println(text.length());
} catch (NullPointerException e) {
System.out.println("NullPointerException 발생: " + e.getMessage());
}
2. ArrayIndexOutOfBoundsException
설명: 배열의 인덱스 범위를 벗어나 접근할 때 발생합니다.
int[] numbers = {1, 2, 3};
try {
System.out.println(numbers[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException 발생: " + e.getMessage());
}
3. ArithmeticException
설명: 잘못된 산술 연산이 수행될 때 발생하며, 주로 0으로 나누는 연산에서 발생합니다.
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("ArithmeticException 발생: " + e.getMessage());
}
4. ClassCastException
설명: 객체를 잘못된 타입으로 형변환하려 할 때 발생합니다.
Object obj = "Hello";
try {
Integer num = (Integer) obj;
} catch (ClassCastException e) {
System.out.println("ClassCastException 발생: " + e.getMessage());
}
5. IOException
설명: 입출력 작업 중 오류가 발생할 때 나타납니다. 파일을 읽거나 쓸 때, 파일이 존재하지 않거나 접근이 제한될 경우 주로 발생합니다.
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
try {
File file = new File("test.txt");
FileReader reader = new FileReader(file);
} catch (IOException e) {
System.out.println("IOException 발생: " + e.getMessage());
}
6. FileNotFoundException
설명: 파일을 찾을 수 없을 때 발생합니다. IOException
의 하위 클래스입니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
try {
File file = new File("nonexistent.txt");
FileReader reader = new FileReader(file);
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException 발생: " + e.getMessage());
}
7. SQLException
설명: 데이터베이스 관련 작업 중 오류가 발생할 때 나타납니다. SQL 쿼리가 잘못되었거나 데이터베이스에 연결할 수 없을 때 발생합니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "user", "password");
Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT * FROM nonexistent_table");
} catch (SQLException e) {
System.out.println("SQLException 발생: " + e.getMessage());
}
8. InterruptedException
설명: 스레드가 실행을 기다리거나, 잠시 멈춘 상태에서 인터럽트를 받을 때 발생하는 예외입니다. Thread.sleep()
메서드와 같은 대기 상태에서 주로 발생합니다.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("InterruptedException 발생: " + e.getMessage());
}
9. IllegalArgumentException
설명: 메서드에 전달된 인자가 유효하지 않을 때 발생하는 예외입니다.
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("나이는 0 이상이어야 합니다.");
}
}
try {
setAge(-1);
} catch (IllegalArgumentException e) {
System.out.println("IllegalArgumentException 발생: " + e.getMessage());
}
10. NumberFormatException
설명: 숫자 형식이 아닌 문자열을 숫자로 변환하려 할 때 발생하는 예외입니다.
String number = "ABC";
try {
int result = Integer.parseInt(number);
} catch (NumberFormatException e) {
System.out.println("NumberFormatException 발생: " + e.getMessage());
}
이 외에도 많은 예외들이 존재하며, 예외 처리는 코드의 안정성을 높이기 위해 필수적으로 사용됩니다. Java에서는 기본 제공되는 예외 클래스 외에도 사용자 정의 예외 클래스를 만들어 특정 상황에 맞는 예외를 정의할 수도 있습니다.