20240912 - 예외처리

Dodo Lee·2024년 9월 12일

※ 예외 처리 (Exception Handling) ※

[ 프로그램 오류 ]

1. 정의

프로그램 수행 시 치명적 상황이 발생하여 비정상 종료 상황이 발생한 것
"프로그램 에러"라고도 함

2. 오류의 종류

1) 컴파일 에러
 프로그램의 실행을 막는 소스 코드상의 문법 에러
  → 소스 코드 수정으로 해결
2) 런타임 에러
 프로그램 실행 중 발생하는 에러
 (ex. 배열의 인덱스 범위를 벗어났거나, 계산식의 오류)
  → 주로 if문 사용으로 에러 처리
3) 시스템 에러
 컴퓨터 오작동으로 인한 에러, 소스 코드 수정으로 해결 불가

3. 오류 해결 방법

소스 코드 수정으로 해결 가능한 에러를 예외(Excoption)라고 하는데
이러한 예외 상황(예측 가능한 에러) 구문을 처리하는 방법인
예외 처리(Exception Handling)"를 통해 해결



[ 예외 ]

1. 확인

Java API Document에서 해당 클래스에 대한 생성자나 메소드를 검색하면
그 메소드가 어떤 Exception을 발생시킬 가능성이 있는지 확인 가능
→ 발생하는 예외를 미리 확인하여 상황에 따른 예외 처리 코드를 작성할 수 있음

2. 예외 종류

Unchecked Exception : 선택적으로 확인할 수 있는 예외
Checked Exception : 반드시 확인을 해야만 하는 예외
→ 예외처리 필수(코드상 빨간색 줄이 뜸)

3. 예외 처리 방법

1) Exception이 발생한 곳에서 직접 처리
try~catch문을 이용하여 예외 처리
- try : Exception 발생할 가능성이 있는 코드를 안에 기술
- catch : try 구문에서 Exeption 발생 시 해당하는 Exception에 대한 처리 기술
- finally : Exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술(옵션)

예시)

try{
  br = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("입력 : ");
  String str = br.readLine();
  System.out.println("입력된 문자열 : " + str);
} catch (IOException e) {
  e.printStackTrace();
}
2) Exception 처리를 호출한 메소드에게 위임
메소드 선언 시 throws Exception명을 추가하여 호출한 상위 메소드에게 처리 위임
계속 위임하면 main() 메소드까지 위임하게 되고
main() 메소드에서도 처리되지 않는 경우 프로그램이 비정상 종료됨

4. 사용자 정의 예외

Java API에서 제공하는 Exception Class 만으로는 처리할 수 없는 예외가 있을 경우 사용자의 필요에 의해 생성하는 Exception Class. Exception 발생하는 곳에서 throw new 예외클래스명()으로 발생
public class UserException extends Exception{
  public UserException() {}
  public UserException( String msg ) {
    super( msg );
  }
}
public class UserExceptionController{
  public void method() throws UserException{
    throw new UserException("사용자정의 예외발생");
  }
}
public class Run {
  public static void main( String[] args) {
    UserExceptionController uc
    = new UserExceptionController();
    try{
      uc.method();
    } catch( UserException e) {
    System.out.println(e.getMessage());
    }
  }
}
profile
연습생

0개의 댓글