코딩이란 무엇일까

Java/자바 [20일차] (1)-예외 본문

국비지원수업

Java/자바 [20일차] (1)-예외

둥구는 지굴다 2022. 11. 19. 19:02
🤖글을 읽기 전 필자는 아직 코딩을 배우는 단계이므로 글의 내용이 부정확할 수 있습니다.

여러 가지 글과 책, 수업을 바탕으로 정리한 내용이니 알맞지 않은 내용이 있다면 댓글 남겨주시면 수정하겠습니다.

에러와 예외

에러(Error)란? 

개발 중인 프로그램 외부의 문제를 말합니다.

뭐 예를 들어 컴퓨터 하드웨어 동작의 오작동 또는 고장으로 인해

응용 프로그램 실행 오류가 나는 것을 에러라 합니다.

예외(Exception)란?

사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말합니다.


예외의 종류

일반 예외

일반 예외는 컴파일 체크 예외라고도 합니다.

자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문입니다.

실행 예외

실행 예외는 일반 예외와는 다르게 프로그램을 실행 시 예측할 수 없이 갑자기 발생하는 예외입니다.

따라서 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않습니다.


자바에서의 예외 관리

자바에서는 예외를 클래스로 관리합니다.

JVM은 프로그램을 실행하는 도중 예외가 발생한다면 해당 예외의 클래스로 객체를 생성합니다.

그러고 나서 예외처리 코드에서 예외 객체를 이용할 수 있도록 합니다.


예외 클래스의 상속관계

위의 그림에 나와있는 클래스 말고도 많은 클래스가 있지만 편의를 위해 생략했습니다.

일반 예외와 실행 예외를 나누는 기준은 RuntimeException 클래스로 구분을 합니다.

RuntimeException 클래스의 자식 클래스들은 실행 예외입니다.

RuntimeException 클래스의 자식 클래스가 아니라면 일반 예외입니다.


실행 예외

실행 예외는 자바 컴파일러가 체크하지 않습니다.

따라서 예외가 날 것 같은 코드는 예외 처리 코드를 작성해야 합니다.

실행 예외에 대해 예외 처리 코드를 넣지 않았을 경우, 해당 예외가 발생하면

프로그램은 종료됩니다.


실행 예외의 종류

NullPointerException

null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생

에러 코드

String message = null;
	char temp = message.charAt(0);

실행 내용

Exception in thread "main" java.lang.NullPointerException
	at koreait.day20.C83ExceptionTest.main(C83ExceptionTest.java:13)

ArrayIndexOutofBoundsException

배열에서 인덱스 범위를 초과할 경우 발생합니다.

에러 코드

int[] nums = new int[5];		
				nums[5] =100;

실행 내용

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
	at koreait.day20.C83ExceptionTest.main(C83ExceptionTest.java:29)

NumberFormatException

숫자 외의 다른 문자를 입력하면 예외가 발생

에러 코드

Scanner sc = new Scanner(System.in);
	System.out.print("정수 입력 >>> ");

실행 결과

Exception in thread "main" java.lang.NumberFormatException: For input string: "a"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.base/java.lang.Integer.parseInt(Integer.java:652)
	at java.base/java.lang.Integer.parseInt(Integer.java:770)
	at koreait.day20.C83ExceptionTest.main(C83ExceptionTest.java:22)

 

Comments