반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- junit
- math
- 문자열
- html
- CSS
- IntelliJ
- ArrayList
- Visual Studio Code
- HashMap
- js
- junit5
- 자바문법
- string
- json
- 이클립스
- vscode
- 정규식
- Java
- 테스트자동화
- java테스트
- list
- javascript
- Eclipse
- input
- 자바
- 단위테스트
- 자바스크립트
- 인텔리제이
- Array
- 배열
Archives
- Today
- Total
어제 오늘 내일
[Java] throw vs throws 차이 본문
Java에서 throw와 throws는 모두 예외 처리와 관련된 키워드이지만,
역할과 사용 위치, 의미가 완전히 다릅니다.
헷갈리기 쉬운 개념이지만 차이를 정확히 알면 예외 처리 구조를 훨씬 명확하게 이해할 수 있습니다.
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가 필요
반응형
'IT > Java' 카테고리의 다른 글
| [Java] Optional 사용법 (NullPointerException 방지) (0) | 2026.01.02 |
|---|---|
| [Java] 사용자 정의 예외(Custom Exception) 만들기 (0) | 2026.01.02 |
| [Java] try-catch-finally 사용법 (0) | 2026.01.01 |
| [Java] 예외(Exception)와 오류(Error) 차이 (0) | 2025.12.31 |
| [Java] 제네릭(Generic) 기본 개념과 예제 (0) | 2025.12.31 |
Comments
