오늘은 프로그래밍에서 빠질 수 없는 주제인 '예외 처리'에 대해 이야기해보려 합니다. 특히 Java에서는 'try-catch', 'throws' 등 여러가지 방법으로 예외를 처리할 수 있습니다. 이 포스트에서는 Java의 예외 처리 방법과 그 사용 예를 자세히 살펴보겠습니다.
예외처리란?
프로그램 실행 중 발생할 수 있는 예상치 못한 상황을 '예외'라고 합니다. 이러한 예외를 처리하지 않으면 프로그램은 강제 종료되며, 사용자에게 좋지 않은 경험을 제공하게 됩니다. 그래서 예외처리는 프로그램이 강제 종료되는 것을 막고, 예외 발생 시 적절한 대응을 할 수 있게 하는 것입니다.
try-catch-finally
Java에서 가장 일반적인 예외 처리 방법은 'try-catch-finally' 블럭을 사용하는 것입니다. try 블럭은 예외가 발생할 수 있는 코드를 포함하며, 이 코드에서 예외가 발생하면 즉시 해당 예외를 처리하는 catch 블럭으로 이동합니다. catch 블럭은 특정 예외를 처리하는 코드를 포함합니다. finally 블럭은 예외 발생 여부와 관계없이 항상 실행되는 코드를 포함합니다.
아래의 두가지 예시코드를 통해 '예외 처리'에 대해 좀 더 자세히 알아보겠습니다.
예시코드1 :
public class Main {
public static void main(String[] args) {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} finally {
System.out.println("예외 처리가 완료되었습니다.");
}
}
}
출력 결과 :
0으로 나눌 수 없습니다.
예외 처리가 완료되었습니다.
위 코드는 0으로 나누는 연산을 시도하여 ArithmeticException이 발생합니다. catch 블럭에서 이 예외를 처리하고, "0으로 나눌 수 없습니다."라는 메시지를 출력합니다. finally 블럭에서는 "예외 처리가 완료되었습니다."라는 메시지를 출력합니다.
예시코드2 :
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
try {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("다섯 번째 요소: " + numbers.get(5));
} catch (IndexOutOfBoundsException e) {
System.out.println("리스트의 인덱스 범위를 초과하였습니다.");
} finally {
System.out.println("예외 처리가 완료되었습니다.");
}
}
}
출력 결과 :
리스트의 인덱스 범위를 초과하였습니다.
예외 처리가 완료되었습니다
위 코드는 5개 요소를 갖는 리스트에서 6번째 요소에 접근하려고 시도합니다. 이 때 IndexOutOfBoundsException이 발생하며, 이를 catch 블럭에서 처리합니다. "리스트의 인덱스 범위를 초과하였습니다."라는 메시지를 출력하고, finally 블럭에서 "예외 처리가 완료되었습니다."라는 메시지를 출력합니다.
throws
예외를 직접 처리하지 않고, 그 메소드를 호출한 곳으로 예외를 떠넘기는 방법을 'throws'라고 합니다. 메소드 선언부에 'throws' 키워드를 사용하면, 해당 메소드에서 발생할 수 있는 예외를 명시할 수 있습니다. 이 방법은 메소드를 사용하는 측에서 예외 처리의 책임을 질 수 있게 해줍니다.
public class Main {
public static void main(String[] args) {
try {
riskyMethod();
} catch (Exception e) {
System.out.println("예외가 발생하였습니다: " + e.getMessage());
}
}
static void riskyMethod() throws Exception {
throw new Exception("위험한 메소드입니다!");
}
}
출력 결과 :
예외가 발생하였습니다: 위험한 메소드입니다!
이 코드에서 'riskyMethod' 메소드는 Exception을 발생시킵니다. 이 메소드는 'throws Exception'이라고 선언되어 있어, 이 메소드를 호출하는 'main' 메소드에서 예외를 처리해야 합니다. 'main' 메소드에서는 try-catch 블럭을 사용해 'riskyMethod' 메소드에서 발생하는 예외를 처리합니다.
이처럼 Java의 예외 처리 기능은 프로그램을 보다 안정적이고, 예측 가능하게 만들어 줍니다. 예외 처리를 통해 발생 가능한 예외 상황에 대비할 수 있고, 불가피한 예외 상황에서도 프로그램의 정상적인 동작을 유지하거나 적절한 방법으로 종료할 수 있습니다.
'개발 > Java' 카테고리의 다른 글
Java의 String 클래스 (0) | 2023.07.20 |
---|---|
Java의 Object 클래스 : toString(), equals(), hashCode() (0) | 2023.07.19 |
Java에서의 함수형 인터페이스와 람다식 (0) | 2023.07.19 |
Java에서의 익명 클래스 (Anonymous Classes) (0) | 2023.07.19 |
Java에서의 내부 클래스 (0) | 2023.07.19 |