학습 키워드
- 예외 처리
- 컴파일 에러와 런타임 에러
- 자바 예외 클래스의 상속 계층도
- try-catch 문과 예외 전가
- throws 키워드와 throw 키워드
오류
>오류의 요인
- 외부적인 요인
: 하드웨어 문제
: 네트워크 연결 끊김 등
- 내부적인 요인
: 개발자의 코드 작성 에러
: 컴파일 에러, 런타임 에러 등이 존재
>컴파일 에러, Compile Time Error
: 컴파일 할 때 발생하는 에러
: syntax error 라고도 함. 주된 원인이 문법적인 문제이기 때문.
: 세미콜론 생략, 오탈자, 잘못된 자료형 등 문법적인 문제로 인해 발생하며, 자바 컴파일러가 에러를 발견함.
: IDE가 코드를 작성하는 순간에 친절히 알려줌
>런타임 에러, Run Time Error
: 프로그램이 실행될 때 발생하는 에러
: 개발자가 작성한 코드가 컴퓨터가 수행할 수 없는 작업일 때 발생함.
: 자바 가상 머신에 의해 감지되는 에러.
>에러와 예외
- error, 에러
: 복구하기 어려운 수준의 심각한 오류
: 메모리부족(OutOfMemoryError), 스택오버플로우(StackOverflowError) 등
- exception, 예외
: 상대적으로 미약한 오류
: 잘못된 사용 혹은 코드를 수정함으로써 해결 가능
예외 클래스
>자바의 예외처리 과정
- 예외 발생
- 예외 클래스의 객체 생성
- 예외처리
>예외 클래스의 상속 계층도
- Throwable
: Errors 클래스와 Exceptions 클래스의 상위 클래스
- Exceptions
: 모든 예외처리 클래스의 상위 클래스
: 실행 예외 클래스와 일반 예외 클래스를 하위 클래스로 포함함.
>일반 예외 클래스 (Exception)
: 실행 예외 클래스(혹은 실행 예외 클래스의 하위 클래스)를 제외한 모든 Exception 클래스 및 그 하위 클래스를 의미
: checked exception이라고도 함.
: 컴파일러가 코드 실행 전 예외 처리 코드 여부를 검사하기 때문
: 사용자편의 실수가 주된 원인.
//예시: 잘못된 클래스명(ClassNotFoundException), 데이터 형식(DataFormatException)
>실행 예외 클래스 (Runtime Exception)
: 런타임(실행) 시 발생하는 예외 클래스 및 그 하위클래스를 의미함.
: unchecked exceptioin이라고도 함.
: 개발자의 실수, 자바 문법 요소 등이 주된 원인.
//예시: 클래스 간 형변환 오류(ClassCastException), 벗어난 배열 범위 지정(ArrayIndexOutOfBoundsException), 값이 null
인 참조변수 사용(NullPointerException) 등
예외 처리
>예외 처리 목적
: 기본적으로 예외 및 에러가 발생하면 프로그램이 코드를 실행 중간에 정지됨.
: 예외 처리는 에러가 발생해도 프로그램이 중단되지 않게 하기 위해 사용된다.
>try{...} catch(~~){...}
: 예외 처리 구문의 형식.
try{...}
: 예외가 발생할 수 있는 코드를 바디에 삽입함.
: 예외 발생 시 catch의 바디 내용이 실행됨.
catch(~~){...}
: 발생 가능한 예외를 (~~)안에 작성함.
: (~~)은 매개변수와 비슷한 의미로, Exception 참조형의 참조 변수를 작성하면 모든 예외를 처리할 수 있다.
: try문에서 해당 예외가 발생하면 catch문의 코드가 실행됨.
: 예외 발생 시 실행될 코드를 catch의 바디에 작성
: 하나의 try문에 여러 catch문을 작성할 수 있음. 발생하는 예외에 따라 해당하는 catch문이 실행됨.
: 여러 개의 catch문을 사용할 땐 좁은 범위의 예외에서 넓은 범위의 예외로 작성하는 것이 좋음(조건문처럼)
finally
: catch문 뒤에 작성될 수 있는 구문
: default 값으로, 예외 발생 여부와 상관없이 항상 실행되는 부분
: 선택적 옵션이기에 생략 가능함.
try{
...(a)
}
catch(...(b)){
...(c)
}
finally{
...(d)
}
try-catch문 흐름
1. (a)에 에러가 없으면, (a)를 실행시킨다.
2. (a)에 에러가 있으면, (b)의 예외 타입을 확인한다.
//ex_(b): Exception e
3. (b)의 타입과 일치하는 에러라면 (a)대신 (c)를 실행한다.
4. 모든 과정과 상관없이 마지막에는 (d)를 실행한다.
예외 처리 전가(throws)
>의미
: 예외를 호출한 곳으로 다시 예외를 떠넘기는 방법
: 예외가 호출한 곳에서 예외를 해결하는 방법
: 다른 곳에서 끌어온 것에 예외가 발생했을 때 처리하는 방법
>목적
: 예외가 생길 때마다 예외가 생긴 곳을 찾아 try-catch문을 작성하는 것이 아닌, 예외가 생기는 곳에서 바로 처리할 수 있
게 하기 위함.
>main throws
: main메서드 에서도 throws 키워드를 사용할 수 있음.
: 이 경우 JVM이 실행하다 생긴 예외를 main에서 원인을 찾으려했으나, 다시 예외 처리를 전가했기 때문에 JVM이 최종적
으로 예외를 처리함. (예외의 내용을 콘솔에 출력함)
>throw 키워드
: 예외를 의도적으로 발생시킬때 사용.
'코드스테이츠_국비교육 > [Section1]' 카테고리의 다른 글
16.08_컬렉션 프레임워크[List<E>]_22.09.13 (0) | 2022.09.15 |
---|---|
16.07_컬렉션 프레임워크[개요]_22.09.13 (0) | 2022.09.15 |
16.05_열거형_22.09.13 (0) | 2022.09.14 |
16.03_제네릭 메서드_22.09.13 (0) | 2022.09.14 |
16.02_제네릭 클래스_22.09.13 (1) | 2022.09.13 |