Java 문법 종합반 4주차
오류(Error) vs 예외(Exception)
오류(Error)
회복 불가능한 문제
시스템 레벨에서, 또는 주로 환경적인 이유로 발생
에러가 발생한 경우에는 어떠한 에러로 프로그램이 종료되었는지를 확인하고 대응한다.
예외(Exception)
회복 가능한 문제
예외가 발생할 수 있다는 것을 인지하고 대응할 수 있다.
코드실행 관점에서 예외의 종류
컴파일 에러(예외)
java 파일을 .class 파일로 컴파일할때 발생하는 에러
대부분 프로그램을 실행하기 전에 발생하는 문법적 오류 ▶ 문법에 맞게 다시 작성하면 됨
런타임 에러(예외)
우리가 주로 다루게 될 에러(예외)
문법적인 오류는 아니라서 컴파일은 잘 되었지만 프로그램이 실행도중 맞닥뜨리게 되는 예외
예외처리 관점에서 예외의 종류
확인된 예외(Checked Exception)
컴파일 시점에 확인하는 예외(컴파일 에러와 헷갈리면 안됨)
반드시 예외 처리를 해줘야하는 예외
"Checked Exception에 대한 예외처리를 하지 않으면 컴파일 에러가 발생한다."
미확인된 예외(Unchecked Exception)
런타임 시점에 확인되는 예외
예외 처리가 반드시 필요하지 않은 예외
예외 발생과 try-catch, finally 문
예외 정의하기
// 예외 클래스를 만들어서 예외를 정의
// Exception 자바에서 예외 처리 시스템을 위한 기본 클래스
public class OurBadException extends Exception{
public OurBadException(){
super("위험한 행동을 하면 예외처리를 꼭 해야함!");
}
}
클래스를 만들고, 메서드를 만들며 우리의 메서드가 위험하다고 알리기(throw, throws)
public class OurClass {
private final boolean just = true;
// throws : 던지다!(= 예외를 던지다/발생시키다 )
public void thisMethodIsDangerous() throws OurBadException{
// custom logic
if (just) {
throw new OurBadException();
}
}
}
throws
메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어
여러 종류의 예외사항을 적을 수 있다.
throw
메서드 안에서 실제로 예외 객체를 던질 때 사용하는 예약어.
실제로 던지는 예외 객체 하나와 같이 써야 한다.
throw문을 만나면 흐름은 종료
위험한 메서드 사용할 때 예외 handling 하기
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
// try ~ catch ~ finally 구문
// try : 시도하다
// catch : 잡다(붙잡다)
// finally : 마침내
// 일단 try해 ~~~ 그리고, 예외가 발생하면 그걸 잡아(catch)
// 그리고 정상적으로 수행되든 예외가 발생하든 결국 마침내 수행돼야 하는 로직을 'finally' 수행해!
try {
// 일단 실행
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
System.out.println(e.getMessage());
} finally {
// 무조건 여기는 거친다!
System.out.println("우리는 방금 예외를 handling 했습니다. 정상처리되든, 예외사항이 발생하든 여기를 거쳐요!");
}
}
}
- 위험 감지
- 위험 감지했으면 try-catch, finally 키워드 이용
try {
예외가 발생할 수 있지만 실행을 시도할 코드
} catch (어떤 예외클래스를 받아서 처리할지 정의) {
코드를 실행하다가 예외가 났을 때 실행할 코드
} finally {
마지막에 반드시 실행할 코드
}
catch( )
모든 예외를 다 받고 싶으면 Exception
일부 예외만 받아서 처리하고 싶으면 해당 클래스명을 넣으면 됨
Checked Exception을 정의하고 알리면(throws/throw) 이 메서드를 사용할 때 반드시 예외 처리를 해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.
'TIL' 카테고리의 다른 글
| TIL 241023 (0) | 2024.10.23 |
|---|---|
| TIL 241022 (0) | 2024.10.22 |
| TIL 241018 (0) | 2024.10.18 |
| TIL 241017 (0) | 2024.10.17 |
| TIL 241016 (0) | 2024.10.16 |