일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 설치에러
- getMessage()
- 빨간파일
- exception re-throwing
- 자바클래스가 안보일때
- 사용자 정의 예외
- source root
- 예외발생
- throw e
- 빨간폴더
- 예외처리
- 인텔리제이물음표파일
- 이클립스
- 스프링 mvc프로젝트가 안뜰때
- 깃베쉬
- unchecked예외
- chained exception
- 포트충돌
- 예외 발생
- mvc project 생성
- 파일을 읽을 수 없을때
- mark directory as
- 색상에 따른 상태
- 멀티 catch 블럭
- checked예외
- 소스루트설정
- POST요청
- arrays메서드
- 인텔리제이
- printStackTrace()
- Today
- Total
프로그래밍 스티치
예외처리(exception handling) 본문
프로그램 오류
프로그램이 실행중 어떤 원인에 의해서 오작동을 하거나 비정삭적으로 종료되는 경우가 있다.
이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다.
이를 발생시점에 따라 '컴파일 에러'와 '런타임 에러' 그리고 '논리적 에러'로 나눌 수 있는데 간단히 정리 해보자면
컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행 시에 발생하는 에러 -> 프로그램이 종료됨
논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 -> 프로그램 종료 x
소스코드를 컴파일 하면 컴파일러가 소스코드에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지를 알려준다. 컴파일러가 알려 준 에러들을 수정해서 컴파일을 성공적으로 마치면 클래스 파일이 생성되고 생성된 클래스 파일을 실행할 수 있다.
하지만, 컴파일을 에러없이 성공적으로 마쳤다고 해서 프로그램의 실행시에도 에러가 발생하지 않는것은 아니다!
컴파일러가 실행 도중에 발생할 수 있는 잠재적인 오류까지 검사할 수 없기 때문에 컴파일은 잘 되었어도 실행중에 에러에 의해서 비정상적으로 종료될 수 있다. 이부분을 런타임 에러라고 하는데 자바에서는 런타임에러를 에러와 예외로 나누었다
에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
우리는 이중에서 우리가 수습할 수 있는 예외에 대해서 깊게 파고들것이다.
위와 같은 사진이 논리적 에러의 대표적인 예이다. 새를 날아가게끔 코딩을 했지만, 날개를 사용하지 않고 목을 사용해서 날아가는데, 날아간다는 목표는 이뤘지만 우리의 의도와는 다르다.
예외 클래스의 계층구조
자바에서는 실행 시 발생할 수 있는 오류를 클래스로 정의 하였습니다. 앞서 배운것처럼 모든 클래스의 조상은 Object클래스 이므로 Exception과 Error클래스 역시 Object클래스의 자손들입니다.
Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
checked예외라고 불리며, 예외처리가 필수적! ( 즉 try-catch문을 필수로 사용해야한다)
RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외
unchecked예외라고 불리며 예외처리가 선택적!
예외 처리하기 - try-catch문
예외처리(exception handling)란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며, 정상적인 실행상태를 유지할 수 있도록 하는것입니다.
try{
//예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception e) {
//예외처리를 위한 문장을 적는다.
} finally {
//예외의 발생여부에 관계 없이 항상 수행되어야 하는 문장들을 넣는다.
//finally블럭은 try-catch문의 맨 마지막에 위치해야한다.
하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch블럭이 올수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한개의 catch블럭만 수행된다. 발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.
if문과 달리 try블럭이나 catch블럭 내에 포함된 문장이 하나뿐이어도 괄호{}를 생략할 수 없다!
'JAVA > 예외처리' 카테고리의 다른 글
finally블럭 (0) | 2022.02.09 |
---|---|
메서드에 예외 선언하기 (0) | 2022.02.08 |
예외 발생시키기 (0) | 2022.02.08 |
멀티 catch 블럭 (0) | 2022.02.08 |
try-catch문에서의 흐름 (0) | 2022.02.08 |