학습
Java 예외 처리 기초
Java 예외 처리 기초 — 초급
예외 처리 기초
1. 도입 (왜 배워야 하는가)
프로그래밍에서 예외 처리는 매우 중요한 주제입니다. 예외는 프로그램 실행 중 발생할 수 있는 오류나 비정상적인 상황을 의미하며, 이를 적절히 처리하지 않으면 프로그램이 예기치 않게 종료되거나 잘못된 결과를 초래할 수 있습니다. 실무에서는 사용자에게 신뢰할 수 있는 서비스를 제공하기 위해 예외 처리를 통해 오류를 예방하고, 발생한 오류에 대해 적절한 조치를 취해야 합니다. 만약 예외 처리를 소홀히 한다면, 예를 들어 쇼핑몰 애플리케이션에서 결제 과정에서 문제가 발생했을 때 사용자에게 불편을 끼치고, 이는 직접적인 매출 손실로 이어질 수 있습니다.
2. 핵심 개념 설명
예외 처리의 기본 개념은 프로그램이 실행 중 오류가 발생했을 때, 이를 감지하고 처리하는 방법입니다. 이를 통해 프로그램이 중단되지 않고 계속 실행될 수 있도록 합니다.
- 예외(Exception): 프로그램 실행 중 발생할 수 있는 오류입니다. 예를 들어, 사용자가 존재하지 않는 파일을 열려고 할 때 발생합니다.
- 예외 처리(Exception Handling): 예외가 발생했을 때 이를 잡아서 적절하게 처리하는 것입니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| try | 예외가 발생할 수 있는 코드를 감싸는 블록 |
| catch | 발생한 예외를 처리하는 블록 |
| finally | 예외 발생 여부와 관계없이 항상 실행되는 블록 |
| throw | 사용자 정의 예외를 발생시키는 키워드 |
| throws | 메서드에서 예외를 던질 수 있음을 선언하는 키워드 |
3. 기본 코드 예제
아래는 간단한 예외 처리의 기본 사용법을 보여주는 코드입니다.
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = divide(10, 0); // 0으로 나누기
System.out.println("결과: " + result);
} catch (ArithmeticException e) { // 산술 예외 처리
System.out.println("예외 발생: " + e.getMessage());
} finally {
System.out.println("프로그램 종료");
}
}
public static int divide(int a, int b) {
return a / b; // 나누기 연산
}
}
실행 결과:
예외 발생: / by zero
프로그램 종료
코드 동작 설명:
try블록 내에서divide메서드를 호출하여 10을 0으로 나누려고 합니다.- 0으로 나누기 때문에
ArithmeticException이 발생합니다. catch블록에서 발생한 예외를 잡아서 "예외 발생: / by zero"라는 메시지를 출력합니다.finally블록이 항상 실행되어 "프로그램 종료" 메시지를 출력합니다.- 예외 처리는 프로그램의 안정성을 높여준다.
try,catch,finally의 기본 구조를 이해해야 한다.- 예외를 적절히 처리함으로써 사용자에게 더 나은 경험을 제공할 수 있다.
- 다음에는 사용자 정의 예외 처리나 Java의 예외 계층 구조를 학습하면 좋습니다.
4. 실전 활용 예제
1. 파일 읽기
쇼핑몰에서 제품 정보를 파일로 저장하고 이를 읽는 상황을 가정해봅시다.
import java.io.*;
public class FileReadExample {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("products.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
} catch (IOException e) {
System.out.println("파일 읽기 오류: " + e.getMessage());
}
}
}
2. 사용자 입력 처리
사용자로부터 정수를 입력받는 상황입니다.
import java.util.Scanner;
public class UserInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("정수를 입력하세요: ");
int number = scanner.nextInt();
System.out.println("입력한 정수: " + number);
} catch (java.util.InputMismatchException e) {
System.out.println("잘못된 입력입니다. 정수를 입력하세요.");
} finally {
scanner.close();
}
}
}
5. 흔한 실수와 주의사항
실수 1: 예외를 무시하기
예외를 발생시키고 아무것도 하지 않는 것은 좋은 습관이 아닙니다. 예외를 처리하지 않으면 프로그램의 예측 가능성을 떨어뜨립니다.
잘못된 코드:
try {
int result = divide(10, 0);
} catch (ArithmeticException e) {
// 아무 것도 하지 않음
}
올바른 코드:
try {
int result = divide(10, 0);
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
실수 2: finally 블록의 사용
finally 블록은 항상 실행되지만, 이를 잘못 이해하고 중요한 리소스 해제를 잊는 경우가 많습니다.
잘못된 코드:
try {
// 리소스를 열지만 닫지 않음
} finally {
// 리소스를 닫지 않음
}
올바른 코드:
try {
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
} catch (IOException e) {
// 예외 처리
} finally {
if (reader != null) {
reader.close(); // 리소스를 닫음
}
}