나는 요즘 try catch문을 매 시간 만난다.
사실 선생님께서 try catch문을 설명하실 때 제대로 안들었다.
일단 이해가 안가기도 했고 그 당시에 시험 준비하느라 정신이 수업보다는 다른 곳에
있어서 이해를 잘 못하고 넘어갔었고 이게 이렇게 중요한 코드일거라고 생각을 전-혀 못했다.
한 달? 갓 넘은 시점이었던 것 같은데,, 나 자신 반성해.
지금이라도 이렇게 정리를 해서 완벽하게 뽀개고 넘어가려고 한닷
🔆예외처리
프로그램 실행 시 발생할 수 있는 예기치 못한 예외 발생에 대비한 코드를 작성하는 것
실행 중인 프로그램의 갑작스런 비정상적인 동작을 막고, 에러를 잡아 복구를 시도하거나
회피 하는 식으로 처리를 해서 프로그램을 정상적으로 실행 할 수 있도록 하는 것이다.
🔋try catch문법
try {
// 예외가 발생할 가능성이 있는 코드
} catch (예외타입 변수명) {
// 예외 발생 시 실행되는 코드
} finally {
// 항상 실행되는 코드 (선택적)
}
- try 블록: 여기에는 예외가 발생할 가능성이 있는 코드 작성
예외가 발생하지 않으면 catch 블록은 실행되지 않고, try 블록의 코드가 정상적으로 수행 - catch 블록: try 블록에서 발생한 예외를 처리하는 코드를 작성 (예외의 유형에 따라 여러 개의 catch 블록 사용 가능)
구체적인 예외부터, 상위 예외 순으로 작성 - finally 블록 (선택적): try-catch 블록이 끝난 후 항상 실행되는 코드로 자원 정리와 같은 작업에 사용
(생략할 시 자원 누수의 문제가 있어, 작성하는 것이 좋다!)
🔑예제
public class ExceptionExample {
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("이 메시지는 항상 출력됩니다.");
}
}
}
- try 블록: numbers[3]에 접근하려고 할 때, 배열의 인덱스 범위를 초과하여
ArrayIndexOutOfBoundsException이 발생 - catch 블록: 예외가 발생하면 이 블록이 실행되어 예외 메시지 출력
- finally 블록: 예외 발생 여부와 상관없이 항상 실행
🔑예제2
import java.util.Scanner;
public class DivisionExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = scanner.nextInt();
int result = num1 / num2; // 0으로 나누기 시도
System.out.println("결과: " + result);
} catch (ArithmeticException e) {
System.out.println("예외 발생: 0으로 나눌 수 없습니다.");
} catch (Exception e) {
System.out.println("예외 발생: " + e.getMessage());
} finally {
scanner.close();
System.out.println("스캐너가 닫혔습니다.");
}
}
}
- try 블록: 두 숫자를 입력받고 나누기 실행
- catch 블록: ArithmeticException: 0으로 나눌 경우 발생
일반적인 Exception: 다른 예외를 처리합니다. - finally 블록: 스캐너를 닫아 자원을 정리
🛍️e.printStackTrace()
정말 많이 쓰는 메서드라 정리를 해보겠습니다!
이 메서드는 예외 처리 시 발생한 예외 정보를 출력
예외가 발생한 원인과 예외가 발생한 위치를 상세하게 보여줌
즉 예외가 발생한 메서드와 해당 메서드를 호출한 상위메서드들이 어떤 흐름으로 연결되어 있는지 보여줌
어디서 예외가 발생했는지! 원인이 무엇인지 파악 가능!!
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
e.printStackTrace(); // 호출 스택을 출력
}
}
}
//출력결과
java.lang.ArithmeticException: / by zero
at ExceptionExample.main(ExceptionExample.java:5)
printStackTrace()의 유용성:
- 예외 발생 위치를 정확히 알려주기 때문에, 디버깅이나 오류 추적에 큰 도움
- 예외 처리 도중 예외의 원인과 전체 흐름을 빠르게 파악 가능
- 예외가 어디에서 발생했는지와 어떤 메서드들이 호출되었는지를 확인할 수 있어, 코드 수정 시 매우 유용
printStackTrace()와 e.getMessage()의 차이:
- e.getMessage()는 예외의 간단한 설명(에러 메시지)만 출력
- e.printStackTrace()는 예외가 발생한 경로와 메서드 호출 흐름을 포함한
전체 스택 추적 정보를 출력
🔎혼잣말
아하..왜 오류에
at ExceptionExample.main(ExceptionExample.java:5)이런식으로 뜨는지 이제 이해했다.
ㅋㅋㅋㅋ..예슬아!!!!좀 예민해지자! 무던해지지말자 모든지 궁금해해야겠다.
'developer Studying > Java' 카테고리의 다른 글
[Java]JDBC와 DAO, DTO 코드 흐름 읽어보기 (0) | 2024.09.22 |
---|