Java throws 키워드 이해하기: 예제와 모범 사례
Java throws 키워드
Java에서 throws 키워드는 메서드가 하나 이상의 예외를 던질 수 있음을 선언하게 해줍니다. 잠재적 실패를 명시적으로 나열함으로써 호출자가 예외를 처리하거나 더 전파해야 함을 알리고, 코드를 명확하고 신뢰성 있게 유지합니다.
체크 예외를 던질 수 있는 라이브러리 메서드를 호출하면 Java는 이를 처리하도록 강제합니다. 보통 위험한 코드를 try-catch 블록으로 감쌉니다:

import java.io.*;
class File1 {
public static void main(String[] args) {
try {
FileWriter file = new FileWriter("c:\\Data1.txt");
file.write("Guru99");
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try-catch를 생략하면 컴파일러가 프로그램을 거부합니다. 모든 예외를 개별적으로 처리하는 것은 장황할 수 있지만, Java는 더 깔끔한 대안을 제공합니다: 메서드 시그니처에 throws로 예외를 선언하고 호출자가 처리하도록 위임하는 것입니다.
throws 문법
public void methodName(Parameters) throws Exception1, Exception2, … {
…
}
throws 예제
아래는 같은 파일 쓰기 예제지만 main 메서드가 IOException을 잡는 대신 던지도록 선언합니다:
import java.io.*;
class File1 {
public static void main(String[] args) throws IOException {
FileWriter file = new FileWriter("c:\\Data1.txt");
file.write("Guru99");
file.close();
}
}
이 코드 실행 전 C:\ 드라이브에 Data1.txt 빈 파일을 생성하세요. Java는 체크 예외를 처리하기 위해 컴파일러가 요구하는 두 가지 방법을 제공합니다:
- 위험한 코드를
try-catch 블록으로 감싸기
- 메서드에
throws 선언하고 예외를 호출자에게 전파
적절한 접근법 선택은 문맥에 따라 다릅니다. 메서드가 공개 API의 일부라면 예외를 전파하여 API 표면을 깔끔하게 유지하고 호출자가 실패를 명시적으로 처리하도록 강제하는 것이 좋습니다.
Throw vs Throws
| throw |
throws |
| 새 예외 인스턴스 생성 및 던지기 |
메서드 시그니처에서 메서드가 전파할 예외 선언 |
| 한 번에 하나의 예외만 던질 수 있음 |
여러 예외 타입을 콤마로 구분해 나열 가능 |
| 예: |
예: |
throw new IOException("cannot open connection"); |
throws IOException, ArrayIndexOutOfBoundsException |
요약
throws 키워드는 Java에서 명확한 예외 전파에 필수적입니다. 메서드가 throws를 선언하면 모든 호출자는 처리하거나 더 선언해야 하며, 에러 조건이 결코 묵묵히 무시되지 않게 보장합니다.