⭐️ exception이란 ?
코딩을 하다보면 코드를 잘못 짜거나 , 실행도중에 에러가 나는 경우를 볼 수 있을 것이다.
에러는 여러가지가 있지만 대표적으로 컴파일 에러 , 런타임에러 등이있다.
이를 예외라고 하는데, 예외가 exception이다.
이런 "예외"가 발생했을때 "처리"하는 방법을 "예외처리"라고 한다.
오늘은 이 에러의 종류 및 Java에서 예외처리란것을 알아볼 것이다.
⭐️ 에러의 종류
에러의 종류에는
시스템 에러 : 컴퓨터의 오작동으로 발생하는 에러
컴파일 에러 : 소스코드 문법상의 오류 (개발자 실수)
런타임 에러 : 코드상으로 문제가 없지만 프로그램 실행도중 발생하는 에러
논리 에러 : 문법적으로도 문제가 없고 , 실행했을때도 문제가 없지만
프로그램의 의도와 맞지 않는 동작이나 결과가 나타나는 에러
🧐 예외 처리를 하는 목적 ?
예외를 처리하지 않고 그대로 예외가 발생할 경우 프로그램이 비정상적으로
종료될 수 있기 때문에 이를 방지하기 위해 예외처리를 한다.
방법에는 2가지가 존재한다.
1. try - catch문을 이용한다
2. trows를 이용 ( 떠넘기기 )
[ method1 코드 ]
public void method01() throws InputMismatchException , ArithmeticException{
Scanner sc = new Scanner(System.in);
System.out.print("a/b... a : ");
int a = sc.nextInt();
System.out.print("a/b... b : ");
int b = sc.nextInt();
System.out.printf("%d / %d = %d\n", a, b, a / b);
System.out.println("계산종료");
}
위와같이 숫자를 0으로 나눈경우 ArithmeticException에러가 발생하게 된다.
예외가 발생함과 동시에 new ArithmeticException 객체가 생성되면서 이를
처리해줘야 한다. -> 예외처리를 하지 않으면 해당 에러코드가 보임
🧐 그러면 예오 처리는 어디서 해야하는가 ?
바로 에러가 발생한 메서드를 호출하는 메서드로 가야한다 ‼️
[ main 코드 ]
public static void main(String[] args) {
RunException re = new RunException();
try {
re.method01();
} catch (ArithmeticException e) {
System.out.println("수학적 에러발생");
e.printStackTrace();
} catch (InputMismatchException e) {
System.out.println("입력 오류 발생");
e.printStackTrace();
}
}
현재 main에서 method1()을 호출하고 있기때문에 위에서 말한 2가지 방법중
한가지를 선택해 예외처리를 해줘야한다.
그중에서 main코드는 try-catch를 이용해 예외처리를 한 상황이다.
try{ } 안에 실행될 코드를 작성하고 , 만약 에러가 발생할 시에 catch { } 로 넘어가게 된다.
이때 catch() 안에는 해당 예외 또는 , 그 예외의 부모를 작성해주면 된다.
예외처리는 Java가 제공하는 예외말고도 본인이 직접 예외를 생성할 수 있다.
[ CustomException 코드 ]
public class CustomException extends Exception {
public CustomException() {
}
public CustomException(String message) {
super(message);
}
}
우선 본인이 만든 예외를 만들고 , Exception을 상속받고 , 그 예외를 spuer()를 통해 바꿔보겠다.
[ 예외 발생 코드 ]
public void methodD() throws CustomException{
throw new CustomException("나만의 이유로 에러 발생"); // 예외 직접 발생
}
예외를 throw new CustomExceptio()으로 발생시켜주고 그 발생한 예외 내용은
"나만의 이유로 에러 발생" 을 넣었다. 그 예외는 CustomException class의
생성자를 통해 예외 메세지 문구가 변경되었다.
[ main 코드 ]
public static void main(String[] args) {
RunException re = new RunException();
try {
re.methodD();
} catch (CustomException e) {
throw new RuntimeException(e);
}
}
methodD()에서 예외처리를 thorw로 떠념겼기 때문에 main에서 처리를 해줘야한다.
이때도 위와 마찬가지로 try-catch를 통해 예외처리를 해주었다.
main에서도 throws를 통해 예외를 떠넘길 수 있다.
하지만 main이 예외를 떠넘기면 받을 곳이 없기때문에 그냥 종료가 된다.
예외 처리는 Java에서 제공하는 메서드 , 인터페이스 등에서
가져와 사용할때 예외처리를 꼭 해줘야하는 경우가 많기 때문에
예외처리를 꼭 잘 해주어야 한다 ‼️
'Back End > JAVA' 카테고리의 다른 글
쓰레드에 대하여 (0) | 2025.01.20 |
---|---|
제네릭에 대하여 (0) | 2025.01.17 |
instanceof에 대하여 (0) | 2025.01.13 |
상속에 대하여 (3) | 2025.01.11 |
접근 제한자에 대하여 (1) | 2025.01.09 |