-
[Java] 예외처리(Exception)프로그래밍/JAVA 2022. 8. 10. 20:53728x90
에러는 개발자가 미리 예측하여 처리할 수 없는 것으로 프로그램 실행 중 심각한 문제를 야기하여 실행을 종료한다.
예외는 개발자가 미리 예측하여 예외를 처리할 수 있고 보편적으로 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발행하는 프로그램 오류를 의미한다.
예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 비슷하나 예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.
예외는 두 가지 종류가 있으며, 일반예외와 실행예외로 구분된다.
일반예외는 컴파일러 체크 예외라고도 하는데, 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 컴파일 과정에서 예외 처리 코드가 있는지 검사를 하게되고 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다.
실행 예외는 컴파일러 넌 체크 예외라고도 하는 데, 실행 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외처리 코드가 있는지 검사하지않는다.
예외처리코드
자바 컴파일러는 소스 파일을 컴파일할때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 에러를 발생시켜 개발자가 강제적으로 예외처리 코드를 작성하도록 요구된다. 그러나 실행예외는 컴파일러가 체크해주지않기 때문에 개발자의 경험을 바탕으로 예외처리 코드를 작성해야하는 차이가 있다.
프로그램이 실행되는 도중 발생하는 실행예외를 처리하기 위해 try-catch-finally 문을 사용하면된다.
try{ 실제 코드가 들어가는 곳으로 예외 상황이 발생할 가능성이 있는 코드를 작성 ... } catch(예외객체타입1 참조변수1){ try 블록에서 Exception 이 발생하면 catch 블록으로 오게됨 }catch(예외객체타입2 참조변수2){ try 블록에서 Exception 이 발생하면 catch 블록으로 오게됨 }catch(예외객체타입3 참조변수3){ try 블록에서 Exception 이 발생하면 catch 블록으로 오게됨 } ... }finally{ try 블록에서 Exception 발생의 유무와 상관없이 무조건 실행되는 코드(옵션, 생략가능) }
예시 ) NumberFormatException 예외
public class Exception1 { public static void main(String[] args) { try { String str = "1000 "; System.out.println(Integer.parseInt(str)); } catch (NumberFormatException e) { System.out.println("NumberFormatException 처리완료 !"); } } }
실행예외의 대표 케이스
- ArrayIndexOutOfBoundsException : 배열의 할당된 인덱스 범위를 초과하여 사용할 경우 발생한다.
- NumberFormatException : 문자열을 숫자형으로 변환할 때 변형할 수 없을 경우 발생한다.
- NullPointerException : null를 포함하는 객체의 참조변수에 접근할 때 발생한다.
- NoClassDefFoundException : 찾고자 하는 클래스를 찾지못할 경우 발생한다.
- ClassCastException : 수행할 수 없는 타입 변환이 진행될 경우 발생한다.
- ArithmeticException : 산술 연산에서 정수를 0으로 나누는 등 연산을 수행할 수 없는 경우 발생한다.
예외 떠넘기기
메소드 내부에서 예외가 발생할 수 있는 코드를 작성할때 try-catch 블록으로 예외를 처리하는 것이 기본이다. 그러나 경우에 따라서 메소드를 호출한 곳에서 예외를 떠넘겨야 할 수도 있다. 이때 throws 키워드는 작성하여 예외를 호출할 것으로 예외를 떠넘기는 역할을 한다.
리턴타입 메소드이름(매개변수, ...) throws 예외 클래스1, 예외 클래스2, ...{ ... }
728x90'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 중첩 클래스 (0) 2022.08.11 [Java] 입출력 스트림(Stream) (0) 2022.08.10 [Java] Map 컬렉션 클래스 (0) 2022.08.09 [Java] Set 컬렉션 클래스 (0) 2022.08.09 [Java] List 컬렉션 클래스 (0) 2022.08.09