자바에서는 다음과 같이 말한다.
ㅇ에러(error): 하드웨어의 오동작, 고장으로 인해 프로그램 실행 오류가 발생하는 것
ㅇ예외(exception): 에러 이외에 프로그램 자체에서 발생하는 오류
ㄴ사용자의 잘못된 조작 or 개발자의 잘못된 코딩으로 인함.
둘다 발생하면 프로그램은 즉시 종료된다.
ㅡ>하지만! 예외는 "예외 처리(exception handling)"라는 것을 통해 프로그램을 종료하지 않을 수 있다.
정상 실행 상태를 유지할 수 있다.
챕터10에서는 예외에 대해 학습한다.
예외의 종류와 언제 발생하는지!
(10-1 : 예외, 예외클래스, 일반 예외, 실행 예외)
자바는 예외발생 가능성 높은 코드를 컴파일할 때, "예외 처리 유무"를 확인한다.
ㄴ예외 처리 코드가 있는지 검사하고, 만약 없으면 컴파일되지 않는다.
ㄴ모든 예외에 대해 예외처리유무를 확인하는 것은 아니다.
예외처리를 이해하기 전에 먼저 예외의 종류를 공부해보자.
예외의 종류
ㅇ일반 예외(exception, 컴파일러 체크 예외)
ㄴ예외처리코드가 있는지 검사하고, 없으면 컴파일 오류 발생한다.
ㅇ실행 예외(runtime exception, 컴파일러 넌체크 예외)
ㄴ실행 시 예측할 수 없이 발생한다.
ㄴ컴파일할 때 예외처리코드가 있는지 검사하지 않는다.
예외 관리
자바는 예외를 '클래스로 관리'한다.
1. 예외가 발생하면 JVM이 '해당 예외 클래스로 객체를 생성'한다.
2. 그리고 나서, 예외처리코드에서 해당 예외 객체를 이용할 수 있게 해준다.
모든 예외 클래스는 java.lang.Exception클래스를 상속받는다.
실행 예외
ㄴ실행 예외는 '자바 컴파일러가 체크하지 않는다'
ㄴ오로지 개발자의 경험에 의해서 예외 처리 코드를 작성해야 한다.
(예외처리코드를 작성하지 않으면 곧바로 프로그램이 종료된다.)
여기서 배우는 몇 가지 실행 예외를 잘 익혀두라고 한다!!
ㅇ자바프로그램에서 자주 발생하는 실행 예외다.
ㅇ언제 발생되고, 어떤 오류메세지가 나오는지 잘 알아두자.
오류메세지 | 오류가 발생하는 경우 |
NullPointerException | 객체참조가 없는(null값의) 참조변수로 객체접근(by도트연산자)하려고 한 경우 |
ArrayIndexOutOfBoundsException | 배열에서 인덱스 범위에서 벗어난 인덱스를 사용했을 경우 |
NumberFormatException | 숫자로 변환할 수 없는 데이터를 숫자로 변환하려 했을 때 |
ClassCastException | 클래스를 부적절하게 캐스팅하려고 했을 경우 |
런타임 예외가 뜨는 소스코드를 직접 작성하면서 상황을 익혀보자.
NullPointException
ArrayIndexOutOfBoundsException
args배열에 매개값을 따로 주지 않은 상태..
인덱스 [0]과 [1]을 사용하려면 최소 두 개의 매개값이 필요하다.
다음 창에서 2개의 매개값을 입력해보자
매개값을 주었으니 실행이 된다.
그런데말이다~~
애초에 배열인덱스범위초과 예외가 발생하지 않게 코드를 작성할 수 있다.
배열값을 읽기 전, 배열의 길이를 먼저 조사하면 될 것을...
NumberFormatException
(cf. Integer와 Double은 포장(Wrapper)클래스라고 한다(11장에서 배울 예정). 이 클래스의 정적 메소드인 parseXXX()메소드를 이용하는 거라고 한다!)
ClassCastException
타입 변환: 상,하위 클래스 간에도 일어나고, 구현클래스와 인터페이스 간에도 일어났지!!
ㄴ이런 경우를 제외하고는 클래스는 다른 타입으로 변환불가하다.
그래서 클래스캐스트예외가 발생하는 것!
그래서.. 타입 전에 강제타입 변환이 가능한지 먼저 알아보기 위해 instanceof 연산자를 이용했던 기억이 있다.
(https://splendidlolli.tistory.com/93) 여기서 공부했었다~!
cat이 들어가는 건 맞지 않는 매개값이 들어가는 것이다.
Cat객체가 들어간 animal변수를 Dog타입으로 캐스팅할 수 없다.
저 주석에 있는 내용을 작성해줘야 한다.
'JAVA' 카테고리의 다른 글
[혼자 공부하는 자바] 7/21 11-1 [기본 API클래스] [java.lang 패키지] (0) | 2020.07.21 |
---|---|
[혼자 공부하는 자바] 7/19 10-2 [예외 처리] (0) | 2020.07.19 |
[혼자 공부하는 자바] 7/15 9-2 [익명 객체] [익명자식객체] [익명구현객체] (0) | 2020.07.15 |
객체지향 프로그래밍 간단한 개념 정리 / 특징 (0) | 2020.07.14 |
[2주차] 기본미션 + 선택미션 [혼공단] [혼공자] (0) | 2020.07.14 |