Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바
- java
- 프로그래밍
- Median of Medians
- 계수정렬
- 다이나믹프로그래밍
- 백트래킹
- DP
- 힙정렬
- 버블정렬
- 백준
- 정렬
- 정수론
- 수학
- 재귀
- 알고리즘
- SNS
- 안드로이드
- 선택정렬
- 프로그래밍언어
- 삽입정렬
- 기수정렬
- 퀵정렬
- C++
- 코딩테스트
- 동적프로그래밍
- 병합정렬
- 선택알고리즘
- 동적계획법
- 자료구조
Archives
- Today
- Total
MODE::CREATIVE
[JAVA] 자바의 예외처리 본문
자바의 예외 처리
1. 예외(Exception)란?
**예외(Exception)**는 프로그램 실행 중에 발생하는 비정상적인 상황을 말합니다. 예외는 프로그램의 정상적인 흐름을 방해하며, 이를 처리하지 않으면 프로그램이 중단됩니다. 자바는 이러한 예외를 처리하기 위한 강력한 예외 처리 메커니즘을 제공합니다.
2. 예외 처리의 필요성
- 프로그램 안정성 보장: 예외 처리로 프로그램 중단 없이 문제를 해결할 수 있습니다.
- 에러 추적 및 디버깅 용이: 발생한 예외를 통해 문제의 원인을 파악할 수 있습니다.
- 사용자 경험 개선: 비정상 종료 대신 사용자에게 적절한 안내를 제공합니다.
3. 자바의 예외 계층 구조
자바의 예외는 모두 Throwable 클래스를 상속받습니다. Throwable은 두 가지 주요 하위 클래스로 나뉩니다.
- Error
- 시스템 수준의 심각한 오류(예: JVM의 메모리 부족).
- 일반적으로 개발자가 처리하지 않습니다.
- Exception
- 프로그램에서 처리 가능한 예외.
- 개발자가 적절히 처리해야 하는 대상.
Exception의 종류
- Checked Exception
- 컴파일 시 반드시 처리해야 하는 예외.
- 예: IOException, SQLException.
- Unchecked Exception
- 런타임에 발생하며, 컴파일 시 처리 강제성이 없는 예외.
- 예: NullPointerException, ArithmeticException.
4. 예외 처리 구문: try-catch-finally
4-1. 기본 구조
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외 처리 코드
} finally {
// (선택 사항) 예외 발생 여부와 관계없이 실행되는 코드
}
4-2. 예제: 기본 예외 처리
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // 예외 발생
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} finally {
System.out.println("프로그램 종료.");
}
}
}
출력:
0으로 나눌 수 없습니다.
프로그램 종료.
4-3. 다중 catch 블록
여러 종류의 예외를 처리하려면 다중 catch 블록을 사용할 수 있습니다.
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // 예외 발생
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과.");
} catch (Exception e) {
System.out.println("기타 예외 발생.");
}
5. 예외의 전파와 throws
5-1. 예외 전파
메서드에서 발생한 예외는 호출한 곳으로 전달됩니다. 이를 예외 전파라고 합니다.
5-2. throws 키워드
메서드 선언부에 throws를 사용하여 호출자에게 예외를 전달할 수 있습니다.
public void readFile() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
br.readLine();
br.close();
}
5-3. throws 예제
public class ThrowsExample {
public static void main(String[] args) {
try {
testException();
} catch (Exception e) {
System.out.println("예외 처리: " + e.getMessage());
}
}
public static void testException() throws Exception {
throw new Exception("강제 예외 발생");
}
}
6. 사용자 정의 예외
6-1. 정의 및 사용
필요에 따라 개발자가 직접 예외 클래스를 정의할 수 있습니다. 사용자 정의 예외는 Exception 클래스를 상속받아 만듭니다.
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
6-2. 사용자 정의 예외 예제
public class CustomExceptionExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("미성년자는 접근할 수 없습니다.");
}
}
}
출력:
예외 발생: 미성년자는 접근할 수 없습니다.
7. 예외 처리의 모범 사례
- 적절한 예외 처리:
- 예외를 무조건 catch하지 말고, 실제 필요한 예외만 처리해야 합니다.
- 구체적인 예외 처리:
- 일반적인 Exception보다 구체적인 예외 클래스를 사용합니다.
catch (NullPointerException e) { // 구체적인 예외 처리 }
- 일반적인 Exception보다 구체적인 예외 클래스를 사용합니다.
- finally 사용:
- 리소스 해제를 위해 finally 블록을 활용하거나 try-with-resources를 사용합니다.
- 로그 작성:
- 발생한 예외를 로그로 기록해 문제를 추적 가능하게 만듭니다.
8. try-with-resources (Java 7 이상)
리소스(파일, 데이터베이스 연결 등)를 사용할 때 try-with-resources를 활용하면 자동으로 리소스를 해제할 수 있습니다.
8-1. 기본 구조
try (ResourceType resource = new ResourceType()) {
// 리소스 사용
} catch (Exception e) {
// 예외 처리
}
8-2. 예제: 파일 읽기
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TryWithResourcesExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("파일 읽기 오류: " + e.getMessage());
}
}
}
9. 자주 발생하는 예외와 원인
예외 원인
NullPointerException | 객체가 null인데 메서드나 필드를 호출한 경우 |
ArrayIndexOutOfBoundsException | 배열 인덱스가 범위를 초과한 경우 |
ArithmeticException | 0으로 나누는 경우 |
ClassCastException | 잘못된 타입으로 객체를 변환한 경우 |
IOException | 입출력 작업 중 오류가 발생한 경우 |
10. 결론
자바의 예외 처리는 프로그램의 안정성과 가독성을 높이는 데 중요한 역할을 합니다. 예외 발생 시 적절히 처리하고, 필요에 따라 사용자 정의 예외를 작성하여 코드의 명확성을 높일 수 있습니다. try-catch-finally, throws, try-with-resources 같은 예외 처리 도구를 효과적으로 활용해 예외를 관리하세요.
'JAVA' 카테고리의 다른 글
[JAVA] 자바의 main() 메서드 (0) | 2025.01.11 |
---|---|
[JAVA] 자바의 배열(Array) (0) | 2025.01.11 |
[JAVA] java의 입력(Buffered reader) (0) | 2024.11.17 |
[JAVA] java의 입력(Scanner) (0) | 2024.11.10 |
[JAVA] java의 연산자, 조건문, 반복문 (1) | 2024.11.10 |