Programing_Java

Section#14 _ 예외 처리 본문

MENTOR JAVA

Section#14 _ 예외 처리

Joyfullyever 2025. 1. 21. 15:06

#1 에러(Error)와 예외(Exception)

: Java는 에러 or 예외가 발생할 경우, 클래스로 관리 → 컴파일 or 실행 중 문제가 발생하면 해당 문제에 따른 클래스 객체를 생성

 

#1-1. 에러(error)

: 에러는 개발자가 예측하거나 처리할 수 없는 영역

: 시스템에 비정상적인 상황이 생겼을 경우 → 외부 요인, 프로그램 구동 중 치명적 오류

: Ex) 메모리 부족, 입출력 에러, ...

#1-2. 예외(exception)

: 프로그램 구동 중에 나타나는 오류들 → 문법적으로 문제가 없어보여도 실제 운영 중에 생기는 문제들

 

#2 예외 클래스

: 시스템은 무슨 이유로 예외가 발생했는지 예외 클래스를 에러 메시지로 출력해줌

 

#2-1. NullPointerException

: 가장 빈번하게 발생하며, 우리가 많이 볼 예외

: 객체가 생성되지 않은 상태에서 사용할 경우 발생 → 객체는 정의되었는데 실제 메모리에 생성되지 않을 경우

// NullPointerException 예제
//배열의 변수를 생성하고 선언하지 않음
String[] Array = null;
// 없는 배열을 출력하려고 함
System.out.println("Array[0] = " + Array[0]);

// 결과
NullPointerException 예외 발생

#2-2. NumberFormatException

: 잘못된 문자열을 숫자로 형 변환할 경우 발생

String str01 = "11";
String str02 = "11.11";
// 정수 형태의 문자열을 정수로 변환
int num01 = Integer.parseInt(str01);

// 실수 형태의 문자열을 정수로 변환
int num02 = Integer.parseInt(str02);

// 결과
num01은 정상 출력
num02는 NumberFormatException 예외 발생

#2-3. ArrayIndexOutOfBoundsException

: 인덱스 배열을 초과해서 사용할 때 발생

// 길이가 5인 배열 생성
int[] arr = new int[5];
int[] arr = {1,2,3,4,5};
// 5번 인덱스를 사용하려함
System.out.println(arr[6]);

// 결과
ArrayIndexOutOfBoundsException 예외 발생

#3 예외 처리 문법

#3-1. 예외 처리 과정

1) 코드 진행 중 예외가 발생하면 JVM에 알림

2) JVM은 발생한 예외를 분석, 알맞은 예외 클래스 생성

3) 생성된 예외 객체를 발생한 지점으로 보냄

4) 예외가 발생한 지점에서 처리하지 않으면 프로그램은 비정상 종료

 

#3-1. try-catch문

: catch 메서드는 예외 클래스를 받아서 처리

try{
// 예외가 발생할 수 있는 코드
}
catch(예외클래스명 e){
// 예외 처리 코드
}
finally{
// 반드시 처리해야 하는 코드
}

: 예외를 처리할 때 Exception 클래스를 이용하면 모든 예외 처리 가능

→ 하지만 최상단에 쓴다면 아래로 내려가면서 확인하기 때문에 그 후의 예외는 처리하지 않음

 

#3-3. 다중 catch 사용

: 다중 catch문은 예외별로 예외 처리 코드를 다르게하여 처리 가능: 예외를 다중 처리하여 프로그램을 구성하면 코드에서 발생하는 다양한 예외 처리 가능 → 보다 안정적인 프로그래밍 가능

 

#3-4. finally

: 예외 발생 유무와 상관없이 실행되는 구문, 생략 가능: 예외와 상관없이 반드시 처리해야 하는 구문들을 작성 → 예외가 발생해도 정상 종료되어야 할 구문들에서 사용

 

#4 예외 던지기

: 메서드 내부에서 예외를 처리하지 않고, 해당 메서드를 호출한 쪽에서 예외를 처리하도록 하는 방법

: 예외 던지기를 하는 이유 → 메서드에서 각각 처리할 경우 : 메서드 자체의 코드가 길어지거나, 유지 보수 측면에서 효율이 떨어질 수 있음

→ 메서드를 호출하는 쪽에서 예외를 처리해주면 수월해질 수 있음

 

#4-1 throws 키워드

: 메서드 뒤에 throws 키워드를 사용하여 던지기 할 예외 객체를 붙임: 여러개를 던질 수 있으며, 여러개를 던질 시 콤마(,)로 구분하여 나열

#4-1-1. 예외 클래스 여러개 던지기

void 메서드명 throws NullPointerException, ClassNotFoundException, ...{}

#4-2 임의의 예외 처리 방법

: 프로그램의 규칙에 위배되어 예외를 발생해야 할 경우, 임의로 예외를 발생시킬 수 있음

: 개발자의 의도로 인해 발생 → 위치 : try-catch문의 내부 or 예외 던지기가 구현된 메서드 안

 

#5 사용자 정의 예외 처리

: 목적에 따라 공통기능을 지니는 예외 처리도 필요하기 때문에 개발자가 직접 예외를 생성해서 처리

: 사용자가 만든 클래스에 Exception 또는 RuntimeException을 상속하면 해당 클래스를 예외 처리 객체로 사용 가능

► 최상위 객체 Exception 을 상속할 경우 : 체크 예외를 만들고 싶을 경우

 RuntimeException 을 상속할 경우 : 비체크 예외를 만들고 싶을 경우

: 사용법은 기존 예외 객체들과 동일

class InputErrorException extends Exception{}

'MENTOR JAVA' 카테고리의 다른 글

Section#16 _ 컬렉션 프레임워크  (0) 2025.01.23
Section#15 _ 기본 API 클래스  (0) 2025.01.22
Section#13 _ 내부 클래스  (0) 2025.01.20
Section#11 _ 다형성과 타입 변환  (1) 2025.01.18
Section#10 _ 상속  (0) 2025.01.17