[Java] 예외 처리 (2) : try-catch | throw(s)

ebebebbbebeb·2024년 10월 18일
post-thumbnail

try-catch 문

잠재적으로 발생할 수 있는 에러에 대비하여

실행상태를 유지할 수 있는 예외 처리 방법

여기에 더해 finally 블록을 통해
예외 발생과 상관없이 항상 실행되는 코드도 설정 가능

try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
    // ExceptionType 예외가 발생했을 경우 실행할 코드 
} finally {
    // 예외 발생과 상관없이 항상 실행
}

try

예외가 발생할 가능성이 있는 코드를 작성하는 블록

만약 작성한 코드가 예외 없이 정상적으로 동작하면?
➡️ catch 블록은 실행 ❌ , 예외처리를 종료하거나 finally 블록이 실행

catch

try 블록에서 예외가 발생할 경우 실행되는 블록

여러 종류의 예외 처리 가능

모든 예외에 대한 처리도 가능하며

특정 예외에 대해서만 처리하고 싶다면 괄호() 안에 특정 예외에 대한 클래스를 작성

catch 블록이 여러 개인 경우
일치하는 하나의 catch 블록만 실행되고 예외처리를 종료하거나 finally 블록으로 넘어감

finally

예외 발생과 상관없이 항상 실행되는 블록

finally 필수가 아닌 옵션
➡️ 무조건 작성할 필요는 ❎

throw(s)

throw

개발자가 의도적으로 예외를 발생시키는 것

throw 키워드는

로직을 구현하는 과정에서 컴파일에는 문제가 없지만

로직이 개발자의 의도대로 통과하지 못한 경우에 일부러 예외를 발생시켜야 할 때 사용

런타임에 실행됨

예시

public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("나이는 0보다 작을 수 없습니다.");
    }
    this.age = age;
}

throws

메서드 내에서 예외 처리를 하지 않고

해당 메서드를 사용한 곳에서 예외 처리를 하도록 예외를 전가하는 것

throws 키워드는 메서드 선언부에 사용

컴파일 시에 확인됨

예시

public String readFirstLine(String filename) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    String firstLine = reader.readLine();
    reader.close();
    return firstLine;
}

throws를 사용함으로써 위 메소드를 호출하는 코드에 예외 처리 책임을 전가

...
try {
    String line = readFirstLine("example.txt");
    System.out.println("First line: " + line);
} catch (IOException e) {
    System.out.println("Error reading file: " + e.getMessage());
}
...

0개의 댓글