▶ 프로그램 오류
프로그램 수행 시 치명적 상황이 발생하여 비정상 종료 상황이 발생한 것, 프로그램 에러라고도 함
오류의 종류
1. 컴파일 에러 : 프로그램의 실행을 막는 소스 상의 문법 에러, 소스 구문을 수정하여 해결
2. 런타임 에러 : 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등 주로 if문 사용으로 에러 처리
3. 시스템 에러 : 컴퓨터 오작동으로 인한 에러, 소스 구문으로 해결 불가
오류 해결 방법
소스 수정으로 해결 가능한 에러를 예외(Exception)라고 하는데 이러한 예외 상황(예측 가능한 에러) 구문을 처리 하는 방법인 예외처리를 통해 해결
▶ 예외 클래스 계층 구조
Exception과 Error 클래스 모두 Object 클래스의 자손이며 모든 예외의 최고 조상은 Exception 클래스 반드시 예외 처리해야 하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨
▶ 예외처리(Exception)
▶ 예외처리(Exception)
▶ 예외처리 방법
1. Exception 처리를 호출한 메소드에게 위임
메소드 선언 시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임 / 계속 위임하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료
2. Exception이 발생한 곳에서 직접 처리
try~catch문을 이용하여 예외처리
- try : exception 발생할 가능성이 있는 코드를 안에 기술
- catch : try 구문에서 exception 발생 시 해당하는 exception에 대한 처리 기술 여러 개의 exception처리가 가능하나 exception간의 상속 관계 고려
- finally : exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술 중간에 return문을 만나도 finally구문은 실행되지만 System.exit();를 만나면 무조건 프로그램 종료 주로 java.io나 java.sql 패키지의 메소드 처리 시 이용
package com.kh.example.chap01_throws.controller;
import java.io.IOException;
public class ThrowsController {
public void method1(){
System.out.println("method1() 호출됨...");
try {
int a = 10/0;
method2();
} catch (ArithmeticException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// method3();: handle finally clause
System.out.println("예외 발생 여부와 상관없이 무조건 실행");
}
System.out.println("method1() 종료됨...");
}
public void method2() throws IOException {
System.out.println("method2() 호출됨...");
throw new IOException("강제 오류 발생합니다~");
// System.out.println("method3() 종료됨...");
}
}
exception간의 상속 관계 고려를 무조건 해야한다
catch는 자손부터 부모로 내려가야된다 catch문을 부모로 먼저 받으면 그 밑에 자식 에러는 판단할 필요가 없어지기때문이다
Exception은 최상위 trycatch클래스이다.
▶ 예외처리(Exception)
▶ 예외처리 방법
▶ Exception과 오버라이딩
▶ 사용자 정의 예외
'JAVA' 카테고리의 다른 글
[JAVA] 컬렉션(Collection), 제네릭 (0) | 2025.05.01 |
---|---|
[JAVA] 입출력(IO) (0) | 2025.04.29 |
[JAVA] 기본 API (0) | 2025.04.28 |
[JAVA] 다형성(Polymorphism),추상화,인터페이스 (0) | 2025.04.28 |
[JAVA] 상속(Inherit) (0) | 2025.04.25 |