예외처리(Exception handling)
예외처리(Exception handling)란?
자바(Java)에서 예외처리(Exception handling)는 프로그램 실행 중에 발생할 수 있는 예외 상황을 다룰 때 사용한다. 예외는 실행 중에 발생하는 오류나 예상치 못한 상황을 나타내며, 이러한 상황을 효과적으로 처리하면 프로그램의 안정성을 높일 수 있다. 예외처리는 try, catch, finally, throw, throws 등의 키워드를 사용하여 구현된다.
예외처리 키워드 설명
- try-catch
- try 블록 내에는 예외가 발생할 수 있는 코드를 기술
- catch 블록은 예외가 발생했을 때 해당 예외를 처리하는 부분으로, 예외의 종류에 따라 여러 개의 catch 블록이 사용될 수 있다.
- finally
- finally는 예외 발생 여부와 관계없이 항상 실행되어야 하는 코드
- 주로 리소스 해제나 정리 작업 등을 수행하는 데 사용
- throw
- 개발자가 직접 예외를 발생시킬 때 사용
- 특정 조건이 만족되면 예외를 던지고, 이를 catch 블록에서 처리 가능
- throws
- 메서드 선언부에 사용되며, 메서드에서 발생할 수 있는 예외를 명시합니다.
- 호출하는 측에서는 해당 예외를 처리하거나, 예외를 더 상위 호출자에게 전달 가능
예외처리 사용 예시
1. try - catch - finally
public class MainExample {
public static void main(String[] args) {
try {
// 예외가 발생할 수 있는 코드 -- 1
} catch (CustomException e) {
// 예외 처리 ----------------- 2
} finally {
// 항상 실행되어야 하는 코드 --- 3
}
}
}
1. try 블럭은 말 그대로 try(시도/실행) 시키는 구간이다.
2. try 블럭에서 실행 중 예외(오류)가 발생한다면 catch 블럭으로 넘어가게 된다.
※ 예외가 발생하지 않는다면 finally 블럭으로 이동한다.
finally 블럭은 필수가 아니라 선택사항이며, 없어도 무방하다. (if - else 문에서의 else 느낌)
3. catch에서는 예외처리가 발생했을 때 실행되는 코드 블럭이다.
2. throw
throw new CustomException("Error Message");
코드에서 throw 키워드를 사용하면 프로그램이 특정 조건에 도달했을 때 개발자가 정의한 예외를 강제로 발생시킬 수 있다.
3. throws
public void exampleMethod() throws myException {
// 메서드에서 예외 발생 가능성이 있는 코드
}
exampleMethod() 내부에서 예외가 발생하면 이 예외를 직접 처리하지 않고, 이를 호출한 곳에서 예외 처리를 수행해야 한다.
throws를 작성함으로써 호출자에게 예외처리 강제/안전성을 보장하여 유지보수도 용이해진다.
예외처리의 종류
예외처리의 종류는 다양하지만, 크게 5가지만 설명하자면 아래와 같다.
- NullPointerException (NPE)
- 발생시점: 객체 참조가 없는 상태에서 해당 객체의 메서드나 필드에 접근하려고 할 때 발생
※ 주로 객체 초기화를 제대로 하지 않았을 때 발생하며, if (obj != null)와 같은 체크로 방지
- 발생시점: 객체 참조가 없는 상태에서 해당 객체의 메서드나 필드에 접근하려고 할 때 발생
- ArrayIndexOutOfBoundsException
- 발생시점: 배열에서 유효하지 않은 인덱스에 접근하려고 할 때 발생
※ 배열의 길이를 체크하거나 반복문을 사용할 때 주의가 필요
- 발생시점: 배열에서 유효하지 않은 인덱스에 접근하려고 할 때 발생
- NumberFormatException
- 발생시점: 숫자로 변환할 수 없는 문자열을 숫자로 변환하려고 할 때 발생합니다.
※ 사용자로부터 입력받은 문자열을 숫자로 변환할 때 예외 처리가 필요
- 발생시점: 숫자로 변환할 수 없는 문자열을 숫자로 변환하려고 할 때 발생합니다.
- FileNotFoundException
- 발생시점: 파일을 찾을 수 없는 경우에 발생
※ 파일을 열거나 읽을 때 파일의 존재 여부를 확인하고 예외 처리를 수행해야 함.
- 발생시점: 파일을 찾을 수 없는 경우에 발생
- IOException
- 발생시점: 입출력 동작 중에 발생
※ 파일 입출력, 네트워크 통신 등과 관련된 작업에서 예외 처리가 필요
- 발생시점: 입출력 동작 중에 발생
코드 예시
public class NullPointerExceptionExample {
public static void main(String[] args) {
String str = null;
try {
// null인 문자열에 접근하려고 시도
int length = str.length(); // 이 부분에서 NullPointerException 발생
System.out.println("Length of the string: " + length); // 실행되지 않음
} catch (NullPointerException e) {
System.err.println("Caught NullPointerException: " + e.getMessage());
}
}
}
출력값
Caught NullPointerException: null
NullPointerException을 예시로 작성한 코드이다.
1. 메인메서드에서 문자열인 str이 null 값으로 정의되었고, try문을 통해 예외처리를 실행한다.
2. str은 null값이기에 str.length()는 객체 참조가 없는 상태에서 해당 객체의 메서드나 필드에 접근했기 때문에 NullPointerException이 발생한다.
3. NullPointerException(예외처리) 발생 -> catch블럭으로 넘어가 catch블럭이 실행된다.
'Programming > Java' 카테고리의 다른 글
[Java] 스트림(Stream)이란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.05 |
---|---|
[Java] 스레드(Thread)란? (사용 이유, 사용법) | 민민의 하드디스크 - 티스토리 (0) | 2024.02.04 |
[Java - 자료구조] Map(HashMap, Hashtable, TreeMap)이란? (feat. JSON) | 민민의 하드디스크 - 티스토리 (0) | 2024.02.04 |
[Java] 제네릭(Generic)이란? | 민민의 하드디스크 - 티스토리 (2) | 2024.02.02 |
[Java - 자료구조] LinkedList와 ArrayList란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.02 |