시작하며
김영한님의 자바 로드맵을 마치고 스프링 입문 강의를 듣기에 앞서 수강 전 문의로 질문을 드렸습니다.
이미 전공 수업으로 객체지향 프로그래밍 과목을 수강했기에 전공때 배운 서적을 바탕으로 컬렉션 프레임워크를 공부했고, 예외처리 부분은 전공 서적에 자세히 나와있지 않아서 GPT와 함께 공부했습니다.
이 글은 예외처리의 깊은 부분까지 다루지는 않고, 저처럼 영한님 스프링 강의를 듣기 전에 이정도만 알고 가자~ 하는 부분까지만 다룹니다!
에러의 종류
에러의 종류는 크게 3가지가 있습니다.
- 컴파일 오류
- 문법에 맞지 않게 작성된 오류
- 런타임 오류
- 무한 루프를 실행하거나 재귀 반복문을 잘못 작성하는 등 어디서 발생할 지 모르고 강제로 제어하기 힘든 오류
- 예외
- try-catch 문을 통해서 제어할 수 있는 오류
- 발생해도 시스템이나 사용자에게 해를 끼치지 않고 정상적으로 프로그램을 종료 가능
이중 글의 제목처럼 예외에 집중해서 글을 작성하겠습니다.
예외란 무엇인가?
예외(Exception)는 프로그램 실행 중 발생할 수 예상치 못한 이벤트를 의미합니다.
에러는 아래와 같은 경우에 주로 발생합니다.
예외가 발생하는 경우
- 정수를 0으로 나누는 경우
- 배열의 크기보다 큰 인덱스로 배열의 원소를 접근하는 경우
- 존재하지 않는 파일을 읽으려는 경우
- 정수 입력을 기다리는 코드가 실행되고 있을 때 사용자가 문자를 입력한 경우
- 예외가 발생하면 자바 플랫폼이 먼저 알게 되어 현재 실행 중인 응용프로그램에게 예외를 전달
- 만약 예외 처리를 담당하는 코드 (try - catch)문을 가지고 있지 않다면 응용프로그램을 종료
예외 처리 방법
자바에서는 try-catch-finally 구문을 통해 예외를 처리합니다. 기본적인 구조는 다음과 같습니다.
public class ErrorHandlingExample {
public static void main(String[] args) {
try {
// 예외가 발생할 가능성이 있는 코드 블록
} catch (ExceptionType e) {
// 예외 처리 코드 블록
} finally {
// 예외 발생 여부와 상관없이 실행되는 코드 블록
}
}
}
try 블록 안에는 예외가 발생할 가능성이 있는 코드를 배치합니다.
catch 블록에는 특정 유형의 예외를 처리합니다.
필요한 경우 여러 개의 catch 블록을 사용하여 다양한 유형의 예외를 다르게 처리할 수 있습니다.
finally 블록은 예외 발생 여부와 상관없이 실행되며, 주로 리소스 해제와 같은 정리 작업에 사용됩니다(생략도 가능).
예외 처리 예시
그럼 파일을 읽는 과정에서 발생할 수 있는FileNotFoundException
과 IOException
을 처리하는 예시를 통해서 좀 더 자세히 설명하겠습니다.
public class FileReadExample {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("nonexistentfile.txt"));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (FileNotFoundException e) {
System.err.println("파일을 찾을 수 없습니다: " + e.getMessage());
} catch (IOException e) {
System.err.println("파일 읽기 오류: " + e.getMessage());
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
System.err.println("리더 닫기 오류: " + e.getMessage());
}
}
}
}
}
이 코드는 try 블록에서 파일을 열어 한 줄씩 읽는 코드 입니다.
파일이 존재하지 않거나 읽을 수 없는 경우 catch 블록을 통해 적절하게 예외 처리 로직이 실행됩니다.
마지막으로 finally 블록을 통해서 예외의 발생 여부와 관계없이 항상 안정적으로 파일 리더를 종료하도록 합니다.
예외 처리의 효과
예외 처리를 통해 프로그램의 안정성을 높이고 사용자에게 보다 나은 경험을 제공할 수 있습니다 -> 오류로 인해 프로그램이 갑자기 종료되지 않는 등..
그래서 예외 처리는 자바 프로그래밍에서 단순한 오류 처리를 넘어서 프로그램의 신뢰성과 유지보수성을 향상시키는 중요한 기법입니다.
FAQ
- 자바에서 예외 처리는 왜 중요한가요?
예외 처리는 프로그램의 안정성과 신뢰성을 보장하며, 예상치 못한 오류로부터 프로그램을 보호합니다. finally
블록은 언제 사용되나요?finally
블록은 예외 발생 여부와 상관없이 실행되어야 하는 코드, 주로 리소스 해제 코드를 포함하기 위해 사용해요.- 사용자 정의 예외는 어떻게 만들 수 있나요?
사용자 정의 예외는Exception
클래스를 상속받아 구현할 수 있으며, 특정 상황에 맞는 예외 처리 로직을 포함할 수 있습니다. - 예외 처리를 잘못하면 어떤 문제가 발생하나요?
잘못된 예외 처리는 프로그램의 오류를 숨기거나, 오류 발생 시 적절한 대응을 하지 못하여 프로그램이 불안정해지는 원인이 될 수 있어요. - 예외 처리와 성능의 관계는 어떻게 되나요?
예외 처리는 프로그램 성능에 영향을 줄 수 있지만 적절히 사용되면 프로그램의 안정성과 유지보수성을 높이는 데 기여해요.
맺으며
예외 처리에 대해서 조금이나마 조사하면서 더 자세히 알게된 계기였습니다!
스프링 강의를 듣기 전에 좋은 공부였는데요, 혹시나 틀린 내용이 있다면 언제든 말씀해주시기 바랍니다.
읽어주셔서 감사합니다(꾸벅)