[ 학습 목표 ]
- 자바에서 예외를 직접 정의하고 처리하는 방법을 이해한다.
- throw, throws 키워드의 역할과 차이점을 명확히 구분한다.
- 예외 상황을 만들고 처리하는 실습을 통해 안정적인 코드를 작성한다.
[ 이론 ]
1. 사용자 정의 예외란?
- 자바가 제공하는 기본 예외 클래스 외에도, 직접 새로운 예외 클래스를 정의해서 프로그램에 맞는 예외 상황을 만들 수 있다.
2. 사용자 정의 예외 생성 방법
public class MyException extends Exception {
public MyException(String message) {
super(message); // 부모(Exception) 클래스 생성자 호출
}
}
3. thorw 키워드
- 예외 객체를 강제로 발생시킬 때 사용
throw new MyException("오류 메시지");
4. throws 키워드
- 메서드 선언부에서 "이 메서드는 예외를 던질 수 있다"고 알리는 키워드
void someMethod() throws MyException {
// ...
}
5. 예제: 나이 검사 예외 만들기
📄 사용자 정의 예외 클래스
public class AgeException extends Exception {
public AgeException(String message) {
super(message);
}
}
📄 사용 예시
public class AgeChecker {
public static void checkAge(int age) throws AgeException {
if (age < 0) {
throw new AgeException("나이는 음수가 될 수 없습니다.");
} else {
System.out.println("나이: " + age);
}
}
public static void main(String[] args) {
try {
checkAge(-5); // 여기서 예외 발생
} catch (AgeException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
}
6. 요약
키워드 | 의미 |
throw | 예외를 "직접 발생"시킬 때 사용 |
throws | 예외가 "발생할 수 있음을 알리는" 선언 |
사용자 정의 예외 | Exception 또는 RuntimeException을 상속해서 생성 |
[ 실습 ]
💪 실습 문제
사용자로부터 점수를 입력받아,
0보다 작거나 100보다 크면 ScoreException 예외 발생
정상 범위면 “점수는 정상입니다.” 출력
추가 팁: Scanner, try-catch, 사용자 정의 예외 사용
▼ 내가 푼 실습 문제
public class ScoreException extends Exception {
public ScoreException(String message) {
super(message);
}
}
import java.util.Scanner;
public class ScoreChecker {
public static void checkScore(int score) throws ScoreException {
if (score < 0 || score > 100) {
throw new ScoreException("0보다 작거나 100보다 커야 합니다.");
} else {
System.out.println("점수는 정상입니다.");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
int score = sc.nextInt();
checkScore(score);
} catch (ScoreException e) {
System.out.println("예외 발생: " + e.getMessage());
} finally {
sc.close();
}
}
}
[ 메모 ]
- 사용자 정의 예외는 만들려면 extends 키워드를 사용해서 Exception 내장 클래스를 상속 받아야 한다.
- class 예외명 extends Exception { .. }
- { } 중괄호 안에는 내가 생성한 예외명과 동일한 생성자를 생성하는데 매개변수는 String타입의 message를 작성.
- public 예외명 (String message) { ... }
- { ... } 여기 안에는 super키워드를 사용하여 부모 클래스인 Exception의 생성자를 호출하도록 한다.
- super(message);
- throw는 직접 예외를 발생 시킬 때 사용하고, throws는 메서드에 예외가 발생될 수 있음을 알리는 선언이다.
- throw new 예외명("예외메시지")
- public static void 메서드명() throws 예외명 { ... }
- 사용자 정의 예외는 Exception 또는 RuntimeExeption을 상속해서 생성할 수 있다.
'공부 기록 > Java with ChatGPT' 카테고리의 다른 글
[Java/ChatGPT] Day 15: 컬렉션 정렬 (Comparable & Comparator) (0) | 2025.06.23 |
---|---|
[Java/ChatGPT] Day 14: 컬렉션 프레임워크 기초(List, Set, Map) (0) | 2025.06.22 |
[Java/ChatGPT] Day 12: 예외 처리 (Exception Handling) (0) | 2025.06.21 |
[Java/ChatGPT] Day 11: 추상 클래스와 인터페이스(Abstrac Class & Interface) (0) | 2025.06.19 |
[Java/ChatGPT] Day 10: 다형성(Polymorphism)과 업캐스팅/다운캐스팅 (0) | 2025.06.19 |