1. 런타임 오류란?
(1)런타임오류와 컴파일 오류 비교
종류 | 컴파일 에러 | 런타임 에러 |
뜻 | 소스코드를 기계어로 바꿀 때 (컴파일 시) 일어나는 에러. 대게 문법적 오류로 인해 일어난다. |
코드 실행 도중에 일어나는 에러 코드가 문법적으로 말은 되지만, 논리적으로 말이 안될 때 일어난다. |
Run 했을 시 | 애초에 문법적으로 틀려서 Run 조차 안된다. | 런타임 오류 있을 시 프로그램은 코드를 끝까지 실행하지 못하고 종료된다. (런타임 오류가 발생한 지점에서 프로그램이 종료된다.) |
예시 | int i = "문자열"; (애초에 말이 안되는 구조) |
int[] arr = new int[3]; arr[5] = 100; 해당 배열은 길이가 3이므로, 5에 값을 집어 넣을 수 없기에 에러가 발생한다. 코드 한 줄 한 줄은 문법적 오류가 없지만, 전체적으로 보면 논리적 오류가 있다. Object obj = "test"; System.println.out((int) obj); 문자열은 int로 형 변환할 수 없다. 하지만 Object 객체에는 어떤 자료형 값도 담을 수 있으므로, 해당 코드 한 줄 한 줄은 문법적으로 말이 된다. 한 맥락으로 볼 땐, 논리적으로 말이 안된다. |
(2)런타임 오류의 종류
종류 | 에러 | 예외 |
정의 | 소스 코드 수정을 통해 수습 불가인 것 | 소스 코드 수정을 통해 수습 가능한 것 |
예시 | 메모리가 꽉 차서 더 이상 객체 할당이 불가인 경우, 아무리 코드 수정해도 극복 불가능 |
파일에 접근하려는데, 해당 파일이 없는 경우, 코드의 파일 접근 경로를 수정하여 극복 가능 |
2. 예외처리
(1) 문법
예외처리를 이용하면, 예외가 발생한 지점에서 다른 코드를 대체 실행할 수 있고, 코드를 끝까지 실행할 수 있다.
try{
// 시도하려는 코드 작성(문제가 발생할 수 있는 부분)
} catch (Exception e){
// 해당 부분 문제 발생 시 catch 구문 적힌 구문이 대체 실행됨.
}
//()안의 e는 Exception 클래스의 객체로 발생한 오류를 담는다.
// Exception 클래스의 메소드를 통해 발생한 오류가 무엇인지 볼 수 있다.
// ex) e.getMessage(), e.printStackTrace()
(2) 코드 리뷰
try {
Object obj = "test";
System.out.println((int)obj);
} catch (Exception e) {
System.out.println("이런 문제가 발생했어요 => " + e.getMessage());
e.printStackTrace();
}
// e.getMessage()와 e.printStackTrace() 전부 무슨 런타임 오류가 일어났는지 보여주는 매소드이다.
// e.getMessage()는 String 형태로 보여준다.
// e.printStackTrace()는 빨간색 오류문 형태로 보여준다.
** 결과문
3. 스스로 해보기
public class TryCatch_Myself {
public static void main(String[] args) {
try {
int[ ] arr = new int[3];
arr[5] = 232;
} catch (Exception e) {
System.out.println("이런 오류가 발생했어요! : " + e.getMessage() );
e.printStackTrace();
}
}
}
'Language > Java' 카테고리의 다른 글
Throw (0) | 2023.02.24 |
---|---|
오류에 따른 맞춤 예외 처리 (0) | 2023.02.23 |
[JAVA] Stream 실습 (0) | 2023.02.19 |
[JAVA] Stream (0) | 2023.02.18 |
[JAVA] 람다식과 함수형 인터페이스 (0) | 2023.02.16 |