어제 오늘 내일

[Java] throw vs throws 차이 본문

IT/Java

[Java] throw vs throws 차이

hi.anna 2026. 1. 1. 08:14

Java에서 throwthrows는 모두 예외 처리와 관련된 키워드이지만,
역할과 사용 위치, 의미가 완전히 다릅니다.
헷갈리기 쉬운 개념이지만 차이를 정확히 알면 예외 처리 구조를 훨씬 명확하게 이해할 수 있습니다.

 

1. 핵심 차이 요약

구분 throw throws
의미 예외를 직접 발생시킴 메서드가 예외를 던질 수 있음을 선언
위치 메서드 내부 메서드 선언부
대상 단일 예외 객체 여러 예외 타입 가능
실행 시점 코드 실행 중(Runtime) 컴파일러에게 예외 가능성 알림
사용 목적 의도적으로 예외 발생 호출자에게 예외 처리 위임

 

2. throw: 예외를 직접 발생시키기

throw는 특정 상황에서 의도적으로 예외 객체를 던지는 키워드입니다.

형식:

throw new 예외클래스("메시지");

예제

public void checkAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("나이는 음수가 될 수 없습니다.");
    }
}

설명

  • age가 0보다 작으면 예외를 강제로 발생
  • 예외 객체는 반드시 new 로 생성해야 함
  • RuntimeException 계열은 명시적인 throws가 필요 없음

 

3. throws: 메서드가 예외를 던질 수 있음을 선언

throws는 현재 메서드에서 예외를 처리하지 않고 호출한 쪽으로 넘기겠다는 의미입니다.

형식:

리턴타입 메서드명() throws 예외타입 {
}

예제

public void readFile() throws IOException {
    FileReader fr = new FileReader("test.txt");
}

설명

  • readFile() 메서드는 IOException을 처리하지 않음
  • readFile()을 호출한 쪽에서 예외를 처리해야 함
  • Checked Exception은 반드시 throws로 선언하거나 try-catch로 처리해야 함

 

4. throw + throws 함께 사용하기

두 키워드는 함께 사용되는 경우가 많습니다.

public void parse(String str) throws Exception {
    if (str == null) {
        throw new Exception("문자열이 null 입니다.");
    }
}

설명

  • throws: parse()가 Exception을 던질 수 있음을 알림
  • throw: 실제로 예외를 발생시킴

 

5. Checked Exception vs Unchecked Exception에서의 차이

✔ Checked Exception(예: IOException)

  • 반드시 try-catch 또는 throws 필요
  • throw로 발생시키면 throws로 선언해야 함

✔ Unchecked Exception(RuntimeException 계열)

  • throws 선언 없이 throw로 발생해도 컴파일 오류 없음

예:

throw new NullPointerException(); // throws 필요 없음

 

 

6. 실전 예제 비교

6-1. throw 사용 예

public void deposit(int amount) {
    if (amount <= 0) {
        throw new IllegalArgumentException("입금액은 0보다 커야 합니다.");
    }
}

6-2. throws 사용 예

public void readConfig() throws FileNotFoundException {
    FileInputStream fis = new FileInputStream("config.txt");
}

6-3. throw + throws 조합

public void validate(String name) throws Exception {
    if (name.isEmpty()) {
        throw new Exception("이름이 비어 있습니다.");
    }
}

 

 

7. 한눈에 보는 throw vs throws

항목  throw  throws
목적 예외를 직접 만들어 던짐 예외 처리를 호출자에게 위임
사용 위치 메서드 내부 메서드 선언부
발생 시점 실행 중 컴파일 시 선언
객체 생성 여부 예외 객체 생성 필요 예외 객체 생성 없음
개수 한 번에 하나 여러 개 가능 (throws A, B)

 

8. 정리

  • throw: 실행 중 특정 상황에서 예외를 직접 발생
  • throws: 메서드가 예외를 던질 수 있음을 선언 → 호출자에게 책임 이동
  • RuntimeException은 throws 없이도 throw 가능
  • Checked Exception은 반드시 throws 또는 try-catch가 필요

 

반응형
Comments