질문)
Java언어에서 throws Exception 의무화는 어떤 개념인가요?
답변)
Java의 throws Exception 의무화는 체크 예외(Checked Exception) 라는 Java만의 독특한 예외 처리 규칙 때문에 존재하는 개념입니다.
C#, Python, C++에는 없는 Java만의 강제 규칙입니다.
아래에 아주 쉽게 설명해드립니다.
✅ 1. Java에는 두 종류의 예외가 있다
Java 예외(Exception)는 크게 두 가지로 나눕니다.
종류설명예시
| Checked Exception | 반드시 처리해야 하는 예외 → “컴파일러가 강제” | IOException, SQLException, ParseException |
| Unchecked Exception | 처리해도 되고, 안 해도 컴파일됨 | NullPointerException, RuntimeException |
여기서 문제는 Checked Exception입니다.
✅ 2. “Checked Exception은 반드시 처리해야 한다”
Java의 규칙:
Checked Exception이 발생할 가능성이 있는 메서드는
반드시
- try/catch로 잡거나
- 메서드 선언부에서 throws로 호출자에게 던져야 한다.
예시:
public void readFile() throws IOException { FileInputStream f = new FileInputStream("aaa.txt"); }
왜 이렇게 해야 하냐면…
new FileInputStream()은 파일이 없으면 반드시 IOException이 발생할 수 있기 때문입니다.
✅ 3. 왜 “의무적으로 적어야 하는가?”
Java 컴파일러는 다음을 검사합니다:
❌ 만약 IOException이 날 수 있는 코드를
try-catch도 없이
throws도 없이
그냥 실행한다면?
→ 컴파일 에러가 발생합니다.
즉, Java는 다음과 같이 강제로 예외 처리 정책을 코드에 명시하도록 의무화합니다:
✔ 이 메서드 안에서 내가 처리할게
try { FileInputStream f = new FileInputStream("aaa.txt"); } catch(IOException e) { e.printStackTrace(); }
또는
✔ 나는 처리 안 할 테니 호출자가 처리해라
public void readFile() throws IOException { FileInputStream f = new FileInputStream("aaa.txt"); }
이 두 개 중 반드시 하나를 해야 컴파일됩니다.
✅ 4. C#, Python 등은 왜 이게 없을까?
C#에는 Checked Exception 개념이 아예 없습니다.
즉, 아래 코드도 경고 없이 그냥 컴파일됩니다:
var f = new FileStream("aaa.txt", FileMode.Open);
예외가 발생하면 런타임에 처리할지 말지 결정할 수 있기 때문입니다.
✅ 5. Checked Exception(의무 처리)의 장점과 단점
👍 장점
- 예외가 날 수 있는 부분을 개발자에게 명확히 알림
- 컴파일 단계에서 누락된 예외 처리를 강제로 방지
👎 단점 (실무에서 더 많이 거론됨)
- 코드가 지나치게 복잡해짐
→ 메서드 위에 throws가 줄줄이 이어짐 - 라이브러리 설계가 번잡해짐
- 결국 “무의미한 try-catch spam”이 생김
그래서 최신 언어들은 대부분 Checked Exception을 채택하지 않음.
📌 결론
Java의 “throws Exception 의무화”란,
Checked Exception을 반드시 명시적으로 처리하도록 컴파일러가 강제하는 규칙입니다.
'java 언어 > CHAT.GPT' 카테고리의 다른 글
| throws Exception vs throws IOException (0) | 2025.11.25 |
|---|---|
| Checked Exception(의무 처리)의 장점과 단점 (0) | 2025.11.25 |
| RuntimeException 이상이면서 Exception 계열 → Checked (처리 강제 O) (0) | 2025.11.25 |
| throw는 예외를 명시적으로 던지는 데 사용됩니다. (0) | 2025.01.11 |