본문 바로가기

Language/Java

Run-Time(런타임) 오류와 예외 처리

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