Java/문법

Java Exception-try catch로 예외 상황 처리하기

ssury94 2024. 12. 17. 18:37

Exception (예외)은 일반적으로 "에러"라고 불리는 프로그램 실행 중 발생하는 의도치 않은 문제를 의미

자바에서는 오류를 Error와 Exception으로 구분한다.

 

Error:
시스템이 종료되어야 할 정도로 심각한 문제를 나타냅니다.
예를 들어, 메모리 부족이나 스택 오버플로우와 같은 상황이 포함됩니다.
이러한 오류는 복구할 수 없으며, 프로그램이 비정상적으로 종료될 수 있습니다.

Exception:
프로그램 실행 중 발생할 수 있는 예기치 않은 이상 상태를 나타냅니다.
예외는 발생하더라도 적절한 예외 처리를 통해 복구할 수 있습니다.
예를 들어, NullPointerException이나 ArrayIndexOutOfBoundsException 같은 런타임 예외가 있습니다.
자바에서는 try-catch 문을 사용하여 이러한 예외를 처리할 수 있습니다.

 

그러면 적절한 예외 처리에 대해 알아봅시다.

 

먼저 적당한 오류상황 exception 부터 만들어보자

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        //프로그램에서 에러가 발생했을때 어떻게 처리할 것인가.
 
        ArrayList<String> nameList=null;
        nameList.add("홍길동");
        //힙 메모리 (클래스)에 객체 생성을 안함 << 에러
        //.NullPointerException 가리킬데가없당
        
        //애초에 에러라서 prinln은 실행도 되지 않고 종료되었다.
        System.out.println("저장된 데이터 확인");
        System.out.println(nameList.get(0));
    }
}

ArrayList nameList= null;

ArrayList 가 초기화되지 않았음. nameList는 null로 초기화 되어있음 = 어떤 객체도 가리키지 않음

힙 메모리에 ArrayList 객체 생성이 안되었기때문에 add가 불가한데 nameList변수에 "홍길동"을 추가하려고했다

= 에러! 프로세스 종료

 

        System.out.println("저장된 데이터 확인");
        System.out.println(nameList.get(0));

는 프로세스가 종료되었기때문에 실행되지도 않고 종료 되었다.

 

프로그램은 예외가 발생한 지점에서 즉시 종료되며 이후 코드는 실행 되지 않는다.


try catch로 에러상황 처리하기

// try 필수 // catch 필수 // finally 옵셔널

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {

        //익셉션(에러)이 발생할 만한 곳에 try로 묶은다.
        try{
        ArrayList<String> nameList=null;
        nameList.add("홍길동");
            System.out.println("저장된 데이터 확인");
            System.out.println(nameList.get(0));
            //에러발생시 catch로 가고
        } catch (Exception e){
            //익셉션이 발생하면 처리해줄 코드를 여기에 작성
            System.out.println(e.toString());
        } // 익셉션상황 아니면 건너뛰어라

        System.out.println("Good bye");
    }
}
  1. 예외가 발생한 경우 
    발생한 예외와 일치하는 catch 블럭을 찾는다. 
  2. 일치하는 catch 블럭이 존재하면 해당 블럭의 코드를 수행한 후 try-catch 문을 빠져나와 다음 코드로 넘어간다. 

    Exception e
    정의: catch (Exception e)에서 Exception은 예외 클래스의 타입을 나타내고, e는 발생한 예외를 저장하는 변수입니다. 
    이 변수는 예외가 발생했을 때 그 정보를 담고 있어, 이후에 이를 활용하여 적절한 처리를 할 수 있습니다.
    목적: 이 변수를 통해 예외의 종류와 메시지에 접근할 수 있으며, 프로그램이 비정상적으로 종료되는 것을 방지하는 데 도움을 줍니다.

    e.toString()
    기능: e.toString() 메서드는 예외 객체의 문자열 표현을 반환합니다. 
    일반적으로 이 문자열은 예외 클래스의 이름과 함께 발생한 원인에 대한 간단한 메시지를 포함합니다. 
    원인에 대한 메시지 출력
  3. 만약 예외가 일치하는 catch 블럭이 없는 경우 예외는 처리되지 못한다. 

예외가 발생하지 않은 경우 
- catch 블럭을 수행하지 않고 전체 try-catch 문을 빠져나와 수행을 계속한다. 

 


예외 상황이 없는 경우도 확인해보자.

ArrayList에 객체가 생성 될 수 있도록 설정해줬다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        //프로그램에서 에러가 발생했을때 어떻게 처리할 것인가.
        //서버는 중단 되면 안된다.

        //에러가 났을때, 프로그램을 종료시키지 말고 잘 처리할 수 있도록 처리하는 방법
        // try 필수
        // catch 필수
        // finally 옵셔널

        //so 익셉션(에러)이 발생할 만한 곳에 try로 묶은다.
        try{
            ArrayList<String> nameList=new ArrayList<>();
            nameList.add("홍길동");
            System.out.println("저장된 데이터 확인");
            System.out.println(nameList.get(0));
            //에러발생시 catch로 가고
        } catch (Exception e){
            //익셉션이 발생하면 처리해줄 코드를 여기에 작성
            System.out.println(e.toString());
        } // 아니면 건너뛰어라

        System.out.println("Good bye");


    }
}

 

exception상황이 없었으므로 잘 처리되어 System.out.println() 함수들도 잘 동작 하였다.