[Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외

2025. 1. 10. 19:19·TIL (Today I Learned)

예외 Exception

Java에서 예외(Exception)은 프로그램 실행 중에 발생할 수 있는 오류를 말한다.

예외 처리를 통해 프로그램이 비정상적으로 종료되는 것을 방지할 수 있다.

 

예외 처리의 기본 구조

try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
    // 예외를 처리하는 코드
} finally {
    // 선택 사항: 항상 실행되는 코드 (자원 정리 등)
}
  • `try`: 예외가 발생할 가능성이 있는 코드를 감싼다.
  • `catch`: 특정 예외가 발생했을 때, 이를 처리하는 코드를 작성한다.
  • `finally`: 예외 발생 여부와 관계없이 항상 실행되는 블록으로, 자원 정리 등에 사용된다.

 

예외 처리 예시

try {
    int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
} finally {
    System.out.println("예외 처리 완료");
}

 


`throw`와 `throws`

`throw`

  • 목적: 특정 시점에 예외를 직접 발생시킬 때 사용
  • 위치: 메서드 내부에서 사용
public class ThrowExample {
    public static void main(String[] args) {
        try {
            checkAge(15); // 15는 유효하지 않은 나이
        } catch (IllegalArgumentException e) {
            System.out.println("예외 발생: " + e.getMessage());
        }
    }

    public static void checkAge(int age) {
        if (age < 18) {
            throw new IllegalArgumentException("나이는 18세 이상이어야 합니다."); // 예외 발생
        }
        System.out.println("나이는 적절합니다.");
    }
}

 

`throws`

  • 목적: 메서드가 특정 예외를 발생시킬 가능성이 있음을 호출자에게 알릴 때 사용
  • 위치: 메서드 선언부
import java.io.*;

public class ThrowsExample {
    public static void main(String[] args) {
        try {
            readFile("nonexistent.txt"); // 없는 파일 읽기 시도
        } catch (IOException e) {
            System.out.println("예외 발생: " + e.getMessage());
        }
    }

    public static void readFile(String fileName) throws IOException {
        FileReader file = new FileReader(fileName); // IOException 발생 가능
        file.read();
    }
}

 

`throw`와 `throws` 차이점

특징 `throw` `throws`
목적 특정 시점에 예외를 발생시킴 메서드가 예외를 던질 수 있음을 선언
사용 위치 메서드 내부 메서드 선언부
구문 `throw new ExceptionType("Message");` `pulbic void methodName() throws ExceptionType{}`
의미 실행 중 예외를 직접 던짐 호출자가 예외를 처리해야 함을 알림

 


사용자 정의 예외

Java에서 기본 제공되는 예외 클래스 외에 특정 상황에 적합한 예외를 만들기 위해 사용
예외의 의미를 더 명확하게 하고, 코드 가독성과 유지보수성을 높일 수 있다.

 

Checked Exception vs Unchecked Exception

Checked Exception

  • 컴파일 시점에서 처리해야 하는 예외
  • `Exception` 클래스를 상속받아 만든다.
  • 반드시 `try-catch` 또는 `throws`로 처리해야 한다.
  • 예외 처리가 강제되므로, 안전하고 예측 가능한 코드를 작성할 수 있다.
  • 예상 가능한 외부 오류에 사용한다 (`IOException`, `SQLException` 등)
  • 예: 잘못된 은행 계좌를 입력한 경우

Unchecked Exception 

  • 런타임 시점에 발생하는 예외
  • `RuntimeException` 클래스를 상속받아 만든다.
  • 처리하지 않아도 컴파일 에러가 발생하지 않는다. (예외 처리가 선택인 상황에서 사용)
  • 일반적으로 프로그래밍 오류나 로직 검증에 사용한다. (`NullPointerException`, `ArithmeticException`등)
  • 예: 출금 시 잔액이 부족한 상황
저작자표시 비영리 변경금지 (새창열림)

'TIL (Today I Learned)' 카테고리의 다른 글

[TIL] SQL 윈도우 함수 (Window Function)  (0) 2025.01.14
[Java] 상속(Inheritance)과 다형성(Polymorphism) 이해  (0) 2025.01.10
[Java] 스택 자료구조: Stack과 Deque 비교  (0) 2025.01.10
[TIL] Java 계산기 만들기 과제 회고 🤓✏️  (2) 2025.01.09
[Java] 람다(Lambda)와 스트림(Stream) API 개념 및 예제  (0) 2025.01.07
'TIL (Today I Learned)' 카테고리의 다른 글
  • [TIL] SQL 윈도우 함수 (Window Function)
  • [Java] 상속(Inheritance)과 다형성(Polymorphism) 이해
  • [Java] 스택 자료구조: Stack과 Deque 비교
  • [TIL] Java 계산기 만들기 과제 회고 🤓✏️
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    다이나믹프로그래밍
    DFS
    sql
    시뮬레이션
    자료구조
    CSS
    GROUP BY
    programmers
    HTML
    jpa
    jwt
    그리디
    Subquery
    BFS
    백준
    greedy
    mysql
    javascript
    완전탐색
    dp
    websocket
    jQuery
    join
    Google Fonts
    java
    BOJ
    bootstrap
    프로그래머스
    백트래킹
    Firebase
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외
상단으로

티스토리툴바