본문 바로가기
카테고리 없음

자바 throw와 throws 차이 정확히 정리하기

by 기록하는 거부기 2025. 7. 25.

자바(Java)에서 안정적인 애플리케이션을 개발하기 위해 가장 중요한 개념 중 하나가 **예외 처리(Exception Handling)**입니다.
이때 throwthrows는 매우 자주 사용되지만, 문법이 유사하여 혼동하기 쉽습니다.
이번 글에서는 자바에서 throwthrows의 차이점과 각각의 역할을 명확하게 정리해드리겠습니다.


1. 예외 처리가 중요한 이유

애플리케이션 실행 중 예외가 발생하면 프로그램이 비정상 종료될 수 있습니다.
이러한 상황을 방지하고, 오류를 제어 가능한 흐름으로 처리하기 위해 자바에서는 try-catch와 함께 예외 객체를 명시적으로 다루는 방식을 채택합니다.
throwthrows는 이 예외 흐름을 정의하는 핵심 키워드입니다.


2. throw 키워드의 개념과 사용 예시

throw예외 객체를 직접 생성해 발생시키는 데 사용됩니다.

if (age < 0) {
    throw new IllegalArgumentException("나이는 음수가 될 수 없습니다.");
}
  • throw 뒤에는 Exception 객체가 반드시 와야 함
  • 예외를 발생시키는 행위 자체를 수행
  • 일반적으로 조건 검사 후, 비정상 입력이나 상태일 때 사용

throw는 하나의 예외만 던질 수 있으며, 실행 즉시 흐름이 중단됩니다.


3. throws 키워드의 개념과 역할

throws메서드 시그니처에서 예외가 발생할 가능성을 선언하는 데 사용됩니다.

public void readFile() throws IOException {
    // 파일 읽기 로직
}
  • 해당 메서드를 호출하는 측에 예외 처리 책임을 위임
  • **체크 예외(checked exception)**의 경우 반드시 throws 선언 필요
  • 비즈니스 로직에서 발생 가능한 예외를 명시적으로 문서화하는 역할

📌 throws는 발생이 아닌 **"예외 발생 가능성 선언"**이라는 점에서 throw와 다릅니다.


4. throw vs throws 문법과 기능 비교

항목 throw throws
역할 예외 발생 예외 선언
위치 메서드 내부 메서드 선언부
뒤따르는 값 예외 객체 예외 클래스명
한 번에 처리 가능 수 1개 예외 객체 ,로 여러 개 선언 가능
사용 목적 실제 예외를 던짐 예외 처리 책임 위임
// 예시 코드
public void check(int num) throws IllegalArgumentException {
    if (num < 0) {
        throw new IllegalArgumentException("음수는 허용되지 않습니다.");
    }
}
  • throws는 호출자에게 책임을 넘기고
  • throw는 실제 예외를 발생시킵니다.

5. 실무에서 자주 하는 실수와 팁

  • throw 뒤에 예외 객체 없이 예외 클래스만 쓰는 실수
throw IllegalArgumentException; // ❌ 오류
throw new IllegalArgumentException(); // ✅
  • throws는 꼭 필요한 경우에만 선언
    • 과도한 예외 위임은 코드 복잡성 증가
    • 필요 없는 throws Exception 선언은 지양
  • RuntimeException은 명시적 throws 없이도 가능
    • NullPointerException, IllegalArgumentException 등은 비체크 예외

✅ 마무리

자바의 throwthrows는 비슷한 이름이지만 역할과 사용 위치가 완전히 다릅니다.

  • throw는 예외를 직접 발생시키고
  • throws는 예외가 발생할 수 있음을 선언합니다.

정확한 이해를 바탕으로 예외를 체계적으로 처리하면, 더 안정적이고 예측 가능한 애플리케이션을 개발할 수 있습니다.