고양이 여름이의 지식채널

JAVA 예외처리 방법 (try-catch, throws, try-with-resources, finally) 본문

Programming/JAVA

JAVA 예외처리 방법 (try-catch, throws, try-with-resources, finally)

썸머캣 2023. 3. 29. 00:14

자바에서는 예외 처리를 위한 다양한 방법이 제공됩니다.

이번 포스팅에서는 try-catch문, throws 키워드, finally 블록, try-with-resources 구문 등의 예외 처리 방법에 대해 자세히 살펴보겠습니다


 

try-catch문

try-catch문은 예외가 발생할 수 있는 영역을 try 블록으로 감싸고, 예외가 발생하면 해당 예외를 처리하기 위한 catch 블록을 사용하는 방법입니다. try 블록 안에서 예외가 발생하면, catch 블록이 해당 예외를 처리하게 됩니다. 이때, try 블록 안에서 발생한 예외가 catch 블록에서 처리되면, try-catch문이 종료되어 다음 코드로 넘어가게 됩니다.

public class ExceptionHandlingExample {
    public static int parseInteger(String str) {
        try {
            return Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("Invalid input: " + str);
            return 0;
        }
    }
}

try 블록 안에서 Integer.parseInt 메소드를 호출하고 있습니다. 만약 str이 숫자로 된 문자열이 아닐 경우, NumberFormatException이 발생하게 되고, 이 예외를 catch 블록에서 처리하게 됩니다. catch 블록에서는 입력받은 문자열을 출력하고, 0을 반환하게 됩니다.

 

throws 키워드

자바에서는 예외가 발생할 가능성이 있는 메소드를 작성할 때, 이 메소드가 예외를 처리하지 않고 호출한 쪽으로 예외를 던질 수 있도록 throws 키워드를 사용합니다. 이를 통해 호출한 쪽에서 예외를 처리할 수 있도록 합니다.

public void readFile(String filePath) throws FileNotFoundException {
    // 파일을 읽는 코드
}


public void processFile(String filePath) {
    try {
        readFile(filePath);
    } catch (FileNotFoundException e) {
        // 예외 처리
    }
}

다음과 같이 FileNotFoundException 예외가 발생할 수 있는 메소드를 작성할 때, throws 키워드를 사용하여 해당 예외를 던져주고 있습니다. 이 메소드를 호출하는 쪽에서는 try-catch 블록을 사용하여 예외를 처리하거나, throws 키워드를 사용하여 해당 예외를 상위 메소드로 던져줄 수 있습니다.

 

 

메소드에 여러 개의 예외가 발생할 수 있다면,  throws 키워드를 이용하여 여러 개의 예외를 던져줄 수 있습니다.

public void writeFile(String filePath) throws IOException, SecurityException {
    // 파일을 쓰는 코드
}


public void processFile(String filePath) {
    try {
        readFile(filePath);
    } catch (FileNotFoundException e) {
        // FileNotFoundException 예외 처리
    } catch (IOException e) {
        // IOException 예외 처리
    }
}

readFile() 메소드에서 FileNotFoundException 예외가 발생할 경우 첫 번째 catch 블록에서 해당 예외를 처리하고, IOException 예외가 발생할 경우 두 번째 catch 블록에서 해당 예외를 처리합니다.

 

 

반응형

 

finally 블록

finally 블록을 사용하여 예외와 관계없이 항상 실행되는 코드를 작성할 수도 있습니다. finally 블록 안에 작성된 코드는 예외가 발생하더라도 반드시 실행되며, 파일을 닫는 등의 마무리 작업을 수행하는 데에 사용됩니다.

public void readFile(String filePath) throws FileNotFoundException {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(filePath));
        // 파일을 읽는 코드
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                // IOException 예외 처리
            }
        }
    }
}

BufferedReader 객체를 사용하여 파일을 읽고 있습니다. finally 블록 안에서는 해당 객체를 닫는 close() 메소드를 호출하고 있으며, 이를 통해 파일을 닫는 작업을 수행하고 있습니다.

 

try-with-resources 구문

try-with-resources는 Java 7부터 지원되는 예외 처리 방식 중 하나입니다. 이 방식은 try-catch-finally 구문과 유사하지만, try 블록에서 사용한 리소스를 자동으로 종료해줍니다.

## 구조
try (리소스 선언) {
    // 리소스 사용
} catch (예외 타입 예외 변수) {
    // 예외 처리
}

#######

public static void main(String[] args) {
    try (Scanner scanner = new Scanner(System.in)) {
        System.out.print("Enter a number: ");
        int num = scanner.nextInt();
        System.out.println("You entered: " + num);
    } catch (InputMismatchException e) {
        System.out.println("Invalid input. Please enter a number.");
    }
}

사용자로부터 정수를 입력받아 출력하는 코드입니다. try-with-resources 구문에서는 Scanner 객체를 선언하고, try 블록에서 해당 객체를 사용합니다. 이후에 try 블록이 종료될 때 자동으로 Scanner 객체가 종료됩니다.

만약 사용자가 정수 대신 문자열을 입력한다면 InputMismatchException이 발생하여 catch 블록이 실행됩니다. 이때 Scanner 객체는 try 블록이 종료되기 전에 자동으로 종료되어 메모리 누수를 방지합니다.

 

 

:: 예외 처리의 원리는 간단합니다. 자바는 예외가 발생하면 해당 예외 클래스의 인스턴스를 생성하고, 이 인스턴스를 catch 블록으로 전달합니다. catch 블록은 이 예외 인스턴스를 이용하여 예외 처리를 수행합니다.

만약 어떤 catch 블록도 해당 예외를 처리하지 않으면, 예외는 호출 스택을 따라 계속 전달되고, 마지막에는 JVM이 예외를 처리하게 됩니다.


 

JAVA 쓰레드(Thread)와 동시성(Concurrency) 이해하기

 

JAVA 쓰레드(Thread)와 동시성(Concurrency) 이해하기

쓰레드(Thread)란? 자바에서 쓰레드는 하나의 프로세스 내에서 독립적으로 실행될 수 있는 작은 실행 단위를 의미합니다. 각각의 쓰레드는 자신만의 스택 메모리와 PC(Program Counter) 값을 가지고 실

summer-cat93.tistory.com

 

 

728x90
반응형
Comments