자바 Java
8. 예외 처리와 사용자 정의 예외
안녕하세요! 태마입니다.
Java 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
자바 Java
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 예외 처리(Exception Handling)란?
예외(Exception)란 프로그램 실행 중 발생할 수 있는 오류나 예기치 않은 상황입니다.
예외가 발생하면 프로그램은 종료되거나 예상치 못한 동작을 할 수 있기 때문에, 예외 처리는 안정적인 프로그램을 만들기 위해 매우 중요합니다.
📌 예외 처리를 사용하는 이유
✔ 프로그램이 비정상적으로 종료되지 않도록 방지
✔ 오류가 발생해도 프로그램의 다른 부분은 정상적으로 실행되게 함
✔ 오류 메시지를 사용자에게 제공하거나 로깅하여 디버깅을 쉽게 함
2. Java에서의 예외 처리 구조
Java에서는 예외를 처리하기 위해 try-catch-finally 구문을 사용합니다.
- try : 예외가 발생할 가능성이 있는 코드를 작성
- catch : 예외가 발생하면 이를 처리하는 코드
- finally : 예외 발생 여부와 상관없이 항상 실행되는 코드 (자원 반납, 종료 작업 등)
✅ 기본 예외 처리 예제
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("이 부분은 항상 실행됩니다.");
}
}
}
📌 try-catch 구문은 예외를 잡아내고, finally 블록은 항상 실행되어 자원 반납 등 처리가 가능
3. 예외 클래스의 계층 구조
Java의 예외는 Throwable 클래스를 상속받고 있습니다.
- Error : JVM 문제와 같은 심각한 오류
- Exception : 프로그램에서 발생할 수 있는 예외
✅ 예외 클래스 계층 구조
- Throwable
- Error : 시스템의 오류 (예: OutOfMemoryError, StackOverflowError)
- Exception : 프로그램에서 발생할 수 있는 예외
- RuntimeException : 런타임 예외 (예: NullPointerException, ArrayIndexOutOfBoundsException)
- Checked Exception : 컴파일 시 체크되는 예외 (예: IOException, SQLException)
📌 RuntimeException은 체크되지 않는 예외이며, Checked Exception은 반드시 처리해야 함.
2. 상세 주제 정리
1. 예외 던지기(Throwing Exceptions)
예외를 직접 던져서 호출한 곳에서 이를 처리할 수 있도록 할 수 있습니다.
- throw : 예외를 명시적으로 던짐
- throws : 메서드에서 발생할 수 있는 예외를 호출자에게 전달
✅ throw 예제
public class ThrowExample {
public static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("나이가 18 미만입니다.");
}
System.out.println("입장 가능");
}
public static void main(String[] args) {
try {
checkAge(15); // 예외 발생
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage()); // "나이가 18 미만입니다." 출력
}
}
}
📌 throw를 사용하면 특정 조건에서 예외를 발생시킬 수 있음
✅ throws 예제
public class ThrowsExample {
public static void readFile(String filename) throws IOException {
// 파일을 읽는 코드
throw new IOException("파일을 읽을 수 없습니다.");
}
public static void main(String[] args) {
try {
readFile("test.txt"); // 예외 처리 위임
} catch (IOException e) {
System.out.println(e.getMessage()); // "파일을 읽을 수 없습니다." 출력
}
}
}
📌 throws를 사용하면 메서드에서 발생할 수 있는 예외를 호출한 곳에 전달
2. 사용자 정의 예외 (Custom Exception)
Java에서는 사용자가 직접 예외 클래스를 만들어 특정 오류를 처리할 수 있습니다.
예를 들어, 비즈니스 로직에 맞는 예외 처리를 하고 싶을 때 유용합니다.
✅ 사용자 정의 예외 예제
// 사용자 정의 예외 클래스
class InvalidAgeException extends Exception {
public InvalidAgeException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void checkAge(int age) throws InvalidAgeException {
if (age < 18) {
throw new InvalidAgeException("나이가 18 미만입니다.");
}
System.out.println("입장 가능");
}
public static void main(String[] args) {
try {
checkAge(15); // 예외 발생
} catch (InvalidAgeException e) {
System.out.println(e.getMessage()); // "나이가 18 미만입니다." 출력
}
}
}
📌 사용자 정의 예외는 Exception 또는 RuntimeException을 상속받아 구현
3. 예외 처리의 베스트 프랙티스 (Best Practices)
✔ 예외는 최소화하고, 필요한 곳에서만 처리
✔ 예외 메시지는 구체적이고 명확하게 제공
✔ 적절한 예외 유형을 선택 (예: IOException, SQLException, RuntimeException)
✔ 예외를 빠르게 처리하고, 자원 정리 작업을 finally 블록에서 수행
📌 불필요한 예외 처리는 프로그램 성능을 저하시킬 수 있으며, 예외가 발생할 가능성이 높은 곳에서만 예외 처리를 해야 함.
✅ 지금까지 Java의 예외 처리와 사용자 정의 예외를 배웠어요!
👉 "이제 멀티스레딩, 동시성 프로그래밍에 대해 배우고 싶다면?"
✅ 다음 회차에서 멀티스레딩과 동시성 프로그래밍을 다뤄봅시다!
'IT Developer > Java' 카테고리의 다른 글
Java 기초 <12. Java 5~17 주요 기능 변화 (제네릭, 스트림, 람다, 레코드 등)> (1) | 2025.03.13 |
---|---|
Java 기초 <11. Java 네트워크 프로그래밍 – Socket, HTTPClient, WebSocket> (0) | 2025.03.12 |
Java 기초 <10. Java 입출력 스트림 (I/O) 기본과 활용> (1) | 2025.03.11 |
Java 기초 <9. 멀티스레딩과 동시성 프로그래밍> (1) | 2025.03.10 |
Java 기초 <7. 컬렉션 프레임워크 (List, Set, Map) 활용 및 성능 비교> (2) | 2025.03.08 |
Java 기초 <6. 인터페이스와 추상 클래스의 차이> (0) | 2025.03.07 |
Java 기초 <5. 객체지향 4대 원칙 (캡슐화, 상속, 다형성, 추상화)> (0) | 2025.03.06 |
Java 기초 <4. 메서드, 생성자, 접근제어자 정리> (1) | 2025.03.05 |