본문 바로가기
Java

[Java] 예외; 에러와 예외 처리하는 방법

by 나는 개발자 2021. 1. 20.
TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.

 

 

예외

시스템 에러를 제외한 컴파일에러, 런타임에러, 논리에러와 같은 에러를 "예외" 라고 한다.

 

 

에러 종류 

시스템 에러

컴퓨터의 오작동으로 발생하는 에러

소스코드로 해결되지 않는다.

컴파일 에러

소스코드의 문법상 문제

매번 컴파일이 진행되기때문에 빨간줄로 에러를 바로 알려준다. 

런타임 에러 

코드상 문제는 없지만 프로그램 실행시 발생하는 에러 

사용자의 실수일 수도, 개발자의 실수일 수도 있다.

논리에러

코드상의 문법적인 오류도 실행시 문제도 없지만 발생 

프로그램 의도와 맞지 않는 논리적인 문제이다.

 

 

 

 

예외처리

이러한 예외들이 발생할 것을 대비해서 "발생시 실행할 내용들을 미리 정의"해 두는 것

 

예외처리방법

1) try ~ catch 문을 이용
2) throws를 이용 (떠넘기기 == 위임)
3) try ~ with ~ resource 이용 

 

 

 

 

 

 

 

예외들은 크게 CheckedException과 UnCheckedException으로 나뉜다.

 

 

 

 

CheckedException

반드시 예외처리를 해줘야하는 예외로

언제 어디서 예외가 발생할지 예측이 불가하기에 미리 예외처리 구문을 작성해두어야 한다.

주로 외부 매개체와 입출력을 할 떄 발생한다.

 

 

 

 

UnCheckedException(RuntimeException) 

프로그램 실행시 발생되는 예측가능한 예외로

문법적으로 문제가 되지는 않기때문에 예외처리를 할 필요가 없다.

 

 

   대표적인 RuntimeException 

IndexOutOfBoundsException

잘못된 인덱스 값으로 접근했을때 발생되는 예외 => 개발자의 실수 

ClassCastException

허용할 수 없는 형변환이 진행됐을 경우 발생되ㅏ는 예외 => 개발자의 실수

NullPointerException

레퍼런스가 아직 null임에도 불구하고 접근했을때 발생하는 예외 

ArithmeticException

나누기 연산에서 부모가 0인경우 발생되는 예외 

NegativeArraySizeException

배열크기를 지정하는 과정에 배열의 크기를 음수로 지정했을 경우 발생되는 예외

ArrayIndexOutOfBoundsException

배열에 부적절한 인덱스로 접근했을때 발생되는 예외

 

 

예측이 가능한 경우엔 조건문으로 해결하고 예측이 불가한 경우엔 예외처리 구문으로 해결하는 것이 권장사항이다.

*if문으로 조건처리 == 애초에 예외 자체가 발생이 안되게끔 개발자가 소스코드로 핸들링하는 것(예외 처리아님)
*예외처리 구문 철 == 예외가 발생했을 때를 대비해서 그때 실행할 내용을 정의해 두는 것

 

 

 

 

 

 

try catch문

try {
    실행할 구문
} catch (여러종류의Exception e){
    예외라면 실행될 구문
}

 

댓글