minOS

자바의 정석 ch8-9,10 예외 발생 시키기 본문

TIL/남궁성의 자바의 정석

자바의 정석 ch8-9,10 예외 발생 시키기

minOE 2024. 9. 8. 18:30
728x90

ch8-9 예외 발생 시키기

1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다.
 Exception e = new Exception("고의로 발생 시킴");​

2. 키워드 throw를 이용해서 예외를 발생시킨다.
  throw e;​

예제
import java.util.logging.Level;
import java.util.logging.Logger;

public class Ex8_6 {
    private static final Logger logger = Logger.getLogger(Ex8_6.class.getName());

    public static void main(String[] args) {
        try {
            Exception e = new Exception("고의로 발생 시킴");
            throw e; // 예외 발생시킴
            //throw new Exception("고의로 발생 시킴") 한줄로 축약 가능
        } catch (Exception e) {
            System.out.println("에러 메세지 : " + e.getMessage());
            logger.log(Level.SEVERE, "An error occurred", e);
        }
        System.out.println("프로그램 정상 종료되었음");
    }
}

 

ch8-10 checked예외, unchecked예외

- checked 예외 : 컴파일러가 예외 처리 여부를 체크 (예외 처리 필수) - Exception과 자손들
- unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리 선택)- RuntimeException과 자손들

checked 예외 - 예외 처리 필수
public class Ex8_7 {
    public static void main(String[] args) {
        throw new Exception(); // 고의로 예외 발생 컴파일에러 checked예외 (예외처리 필수)
    }
}


예외처리

public class Ex8_7 {
    public static void main(String[] args) {
        try {
            throw new Exception(); // 고의로 예외 발생 컴파일에러 checked예외 (예외처리 필수)
        } catch (Exception e) {}
        }
    }




unchecked 예외 - 예외 처리 선택

public class Ex8_8 {
    public static void main(String[] args) {
        throw new RuntimeException(); //언체크드예외, 런타임 시점에서 예외발생
    }
}


 




Unchecked 예외의 선택적 처리 이유:

□ 프로그래머의 실수 반영
  ├─ 주로 논리적 오류나 실수로 발생
  ├─ 예: NullPointerException, ArrayIndexOutOfBoundsException
  └─ 코드 작성 시 주의로 대부분 예방 가능

□ 코드 가독성 향상
  ├─ 모든 Unchecked 예외 처리 강제 시 코드 복잡화
  └─ 불필요한 예외 처리 코드 감소로 가독성 개선

□ 유연성 제공
  ├─ 상황에 따른 예외 처리 여부 결정 가능
  └─ 더 유연한 코드 작성 지원

□ 실행 시간 효율성
  ├─ 필요한 경우에만 선택적 처리 가능
  └─ 불필요한 예외 처리로 인한 성능 저하 방지

□ 예외 전파의 용이성
  ├─ 상위 레벨로의 예외 전파 용이
  └─ 적절한 위치에서의 예외 처리 가능

 

728x90