Java
자바 예외 처리 try - catch - finally or Exception
상상모음
2025. 2. 18. 13:59
자바 예외처리는 프로그램실행 중 발생할 수 있는 오류(예외)를 처리하여
프로그램이 비정상적으로 종료되지 않도록 하는 기능이다.
신입개발자가 알아야 할 핵심적인 내용만 정리.
예외(Exception)란?
프로그램 실행 중 발생하는 오류.
예외가 발생하면 프로그램은 정상적인 흐름을 벗어나서 종료될 수 있음.
예외를 처리하면 프로그램이 계속 실행될 수 있도록 만들 수 있음.
예외의 종류
자바의 예외는 크게 **체크 예외(Checked Exception)**와 **언체크 예외(Unchecked Exception)**로 나뉜다.
체크 예외 (Checked Exception)
- Exception 클래스를 상속받은 예외 중 RuntimeException을 제외한 것
- 반드시 try-catch 또는 throws로 처리해야 함
- 예) IOException, SQLException, FileNotFoundException 등
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileReader reader = new FileReader(file); // FileNotFoundException 발생 가능
} catch (IOException e) {
System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
}
}
}
언체크 예외 (Unchecked Exception)
- RuntimeException을 상속받은 예외
- 개발자가 명시적으로 처리하지 않아도 됨 (컴파일러가 강제하지 않음)
- 예) NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException 등
public class UncheckedExceptionExample {
public static void main(String[] args) {
String text = null;
System.out.println(text.length()); // NullPointerException 발생
}
}
예외 처리 방법
① try-catch 문
- 예외가 발생할 가능성이 있는 코드를 try 블록에 넣고, 예외 발생 시 catch 블록에서 처리
public class TryCatchExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
}
}
② try-catch-finally
- finally 블록은 예외 발생 여부와 관계없이 항상 실행됨 (리소스 정리 등에 사용)
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // ArrayIndexOutOfBoundsException 발생
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과!");
} finally {
System.out.println("예외 처리 종료");
}
}
}
③ throws 키워드
- 메서드에서 예외를 직접 처리하지 않고 호출한 곳으로 넘김
public class ThrowsExample {
public static void main(String[] args) throws Exception {
checkFile();
}
public static void checkFile() throws IOException {
FileReader file = new FileReader("test.txt"); // FileNotFoundException 발생 가능
}
}
④ throw 키워드
- 직접 예외를 발생시킬 때 사용
public class ThrowExample {
public static void main(String[] args) {
int age = -5;
checkAge(age);
}
public static void checkAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("나이는 0보다 커야 합니다.");
}
System.out.println("나이: " + age);
}
}
신입 개발자가 꼭 알아야 할 예외 처리 원칙
✅ 적절한 예외를 처리하되, 남용하지 않기
→ 불필요한 try-catch를 남발하면 코드가 지저분해짐
✅ catch 블록에서 예외 정보를 로깅하기
→ System.out.println(e.getMessage());보다는 Logger를 활용하는 것이 좋음
✅ finally에서 자원 해제하기
→ 파일, 데이터베이스 연결 등은 finally 블록에서 닫아줘야 함
✅ throws와 throw의 차이 이해하기
→ throws는 예외를 호출한 쪽으로 넘기고, throw는 예외를 직접 발생시킴
✅ 예외를 삼키지 말고, 의미 있는 메시지를 남기기
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
throw new RuntimeException("계산 중 오류 발생: " + e.getMessage());
}
✅ 예외가 발생하는 원인을 이해하기
→ 예외가 왜 발생했는지 분석하고, 이를 방지하는 코드 작성
결론
- try-catch, throws, throw, finally의 개념을 이해하고 적절히 활용
- 예외 처리는 필수가 아니라 필요할 때만
- 예외 발생 시 원인 분석과 해결책을 고려하는 습관 들이기
- 실무에서는 예외 로깅을 적극적으로 활용