
Java
예외처리
사용자정의 예외클래스
- Checked 예외클래스 만들기
- Exception 클래스를 상속받아서 사용자정의 예외 클래스를 만든다.
- Unchecked 예외클래스 만들기
- RuntimeException 클래스를 상속받아서 사용자정의 예외 클래스를 만든다.
- 현재는 대부분 Unchecked 사용자정의 예외클래스를 선호합니다.
- 사용자정의 예외클래스 정의하기
public class MyException extends RuntimeException {
public MyException() {}
public MyException(String message) {
super(message);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(Throwable cause) {
super(cause);
}
}
- Throwable클래스가 러메세지, 관련 예외를 저장하는 멤버변수를 가지고 있고 초기화하는 생성자도 보유하고 있기 때문에, 부모의 생성자를 통해서 객체를 초기화한다.
예외의 변환
강제 예외발생

package day2;
public class HTAUncheckedException extends RuntimeException {
public HTAUncheckedException(String msg) {
super(msg);
}
public HTAUncheckedException(String msg, Throwable couse) {
super(msg, couse);
}
}
package day2;
public class HTACheckedException extends Exception {
public HTACheckedException(String msg) {
super(msg);
}
public HTACheckedException(String msg, Throwable cause) {
super(msg, cause);
}
}
package day2;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionApp2 {
public static void test1() throws HTACheckedException {
try {
BufferedReader reader = new BufferedReader(new FileReader("src/day2/sample1.txt"));
String text = reader.readLine();
System.out.println("### 파일내용 : "+ text);
reader.close();
} catch (FileNotFoundException cause) {
throw new HTACheckedException("파일경로가 올바르지 않음", cause);
} catch (IOException cause) {
throw new HTACheckedException("파일 읽기 오류", cause);
}
}
public static Date strToDate(String dateString) throws HTACheckedException {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.parse(dateString);
} catch (ParseException cause) {
throw new HTACheckedException("올바른 날짜 형식이 아닙니다.", cause);
}
}
public static void main(String[] args) {
try {
test1();
Date day = strToDate("2021-12-25");
} catch(HTACheckedException e) {
e.printStackTrace();
}
}
}
package day2;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionApp3 {
public static void test1() {
try {
BufferedReader reader = new BufferedReader(new FileReader("src/day2/sample1.txt"));
String text = reader.readLine();
System.out.println("### 파일 내용 : " + text);
reader.close();
} catch (FileNotFoundException e) {
throw new HTAUncheckedException("파일경로가 올바르지 않습니다", e);
} catch (IOException e) {
throw new HTAUncheckedException("### 파일읽기 오류 발생하였습니다", e);
}
}
public static Date strToDate(String dateString) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.parse(dateString);
} catch (ParseException cause) {
throw new HTAUncheckedException("올바른 날짜 형식이 아닙니다", cause);
}
}
public static void main(String[] args) {
test1();
Date day = strToDate("2010-01-01");
System.out.println(day);
try {
test1();
Date day2 = strToDate("2010-01-01");
System.out.println(day2);
} catch(HTAUncheckedException e) {
e.printStackTrace();
}
}
}