본문 바로가기
won2dev-log
HomeArchiveTagsCategoriesAboutProjects
HomeArchiveTagsCategoriesAboutProjects
won2dev-logwon2dev-logwon2dev-log

비전공 개발자의 로그 | won2dev-log

Navigation
  • Home
  • Archive
  • About
  • Projects
Categories
  • Docs
  • TIL
  • Automation
  • Git · GitHub
  • Project
Tags
  • TIL
  • Java
  • Spring
  • Backend
  • n8n
더보기
About

기록을 거름 삼아 공유는 성장을 만든다.

LicensePrivacy
© won2dev 2026. All rights reserved.
Home›Docs›TIL - Java 기초: 예외와 예외처리의 모든 것
Docs

TIL - Java 기초: 예외와 예외처리의 모든 것

won2dev·2025년 03월 16일
#Java#TIL
TIL - Java 기초: 예외와 예외처리의 모든 것

💬 배운 기술 / 지식

  • 예외(Exception)의 개념
  • 예외 처리(try-catch)의 기본 구조
  • 예외 종류 및 분류
  • 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)의 차이
  • 예외 클래스 계층 구조
  • throw 와 throws 키워드의 역할과 사용법
  • 예외 처리 시 주의점과 모범 사례

1️⃣ 예외(Exception)란?

  • 프로그램 실행 중에 발생하는 비정상적 상황 또는 오류
  • 예: 파일이 없거나, 네트워크 연결 실패, 0으로 나누기 등
  • 예외가 발생하면 현재 실행 중인 코드가 중단되고, 예외를 처리하지 않으면 프로그램이 비정상 종료됨

2️⃣ 예외 처리 (try-catch)

  • 예외 상황을 미리 감지하고 처리해서 프로그램이 중단되지 않도록 하는 코드 블록
  • 기본 구조
java
try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
    // 예외 발생 시 처리하는 코드
} finally {
    // 예외 발생 여부와 관계없이 항상 실행되는 코드 (선택적)
}
try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
    // 예외 발생 시 처리하는 코드
} finally {
    // 예외 발생 여부와 관계없이 항상 실행되는 코드 (선택적)
}

3️⃣ 예외 클래스 계층 구조

plain text
Throwable
 ├─ Error (처리 불가, 시스템 오류)
 └─ Exception (일반 예외, 대부분 여기서 처리)
     ├─ RuntimeException (Unchecked 예외)
     └─ 기타 예외 (Checked 예외)
Throwable
 ├─ Error (처리 불가, 시스템 오류)
 └─ Exception (일반 예외, 대부분 여기서 처리)
     ├─ RuntimeException (Unchecked 예외)
     └─ 기타 예외 (Checked 예외)
구분예시처리 방식
Checked 예외IOException, SQLException반드시 예외 처리 필수 (try-catch or throws)
Unchecked 예외NullPointerException, ArithmeticException선택적으로 처리 (컴파일러 강제 아님)

4️⃣ 체크 예외 (Checked Exception)

  • 컴파일 시 반드시 예외 처리하거나 던져야 함
  • 보통 외부 자원(파일, DB 등) 접근 시 발생
  • 처리하지 않으면 컴파일 에러 발생

예제: 파일 읽기에서 발생할 수 있는 IOException 처리

java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
            String line = reader.readLine();
            System.out.println(line);
            reader.close();
        } catch (IOException e) {
            System.out.println("파일 읽기 중 오류 발생: " + e.getMessage());
        }
    }
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
            String line = reader.readLine();
            System.out.println(line);
            reader.close();
        } catch (IOException e) {
            System.out.println("파일 읽기 중 오류 발생: " + e.getMessage());
        }
    }
}

5️⃣ 언체크 예외 (Unchecked Exception)

  • 런타임 시 발생, 컴파일러가 예외 처리를 강제하지 않음
  • 대부분 프로그래밍 실수로 발생
  • 예: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 등

예제: 0으로 나누기 예외 처리

java
public class UncheckedExceptionExample {
    public static void main(String[] args) {
        try {
            int a = 10;
            int b = 0;
            int c = a / b;  // ArithmeticException 발생
            System.out.println(c);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        }
    }
}
public class UncheckedExceptionExample {
    public static void main(String[] args) {
        try {
            int a = 10;
            int b = 0;
            int c = a / b;  // ArithmeticException 발생
            System.out.println(c);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        }
    }
}

6️⃣ finally 블록

  • 예외 발생 여부와 관계없이 항상 실행되는 코드 블록
  • 주로 자원 반환, 정리 작업에 사용
java
try {
    // 위험한 작업
} catch (Exception e) {
    // 예외 처리
} finally {
    // 자원 해제 등 무조건 실행
}
try {
    // 위험한 작업
} catch (Exception e) {
    // 예외 처리
} finally {
    // 자원 해제 등 무조건 실행
}

7️⃣ 예외 던지기: throw 와 throws

throw 키워드

  • 예외 객체를 직접 발생시키는 명령어
  • 예외를 강제로 발생시키고 싶을 때 사용
java
public void checkAge(int age) {
    if (age < 18) {
        throw new IllegalArgumentException("미성년자는 접근 불가");
    }
}
public void checkAge(int age) {
    if (age < 18) {
        throw new IllegalArgumentException("미성년자는 접근 불가");
    }
}

throws 키워드

  • 메서드 선언부에서 예외 발생 가능성을 명시
  • 호출하는 쪽에서 예외 처리를 하도록 위임할 때 사용
  • Checked 예외일 경우 반드시 선언해야 함
java
public void readFile() throws IOException {
    // 파일 읽기 코드
}
public void readFile() throws IOException {
    // 파일 읽기 코드
}
  • 호출하는 곳에서 try-catch로 처리하거나 다시 throws 선언 가능

8️⃣ 정리 및 주의사항

  • 예외 처리는 프로그램 안정성 향상에 필수
  • 불필요한 예외 잡기는 코드 복잡도 증가
  • 꼭 처리할 예외만 잡고, 의미 있는 메시지 출력 권장
  • 예외를 무시하거나 빈 catch 블록은 피하기
  • 체크 예외는 꼭 처리하거나 던져야 하며, 언체크 예외는 코드 로직 수정으로 예방

💡 느낀 점 / 참고 사항

  • 예외 처리 문법은 처음에 헷갈릴 수 있으나, 실제 코딩 시 반드시 익혀야 하는 필수 스킬
  • 체크 예외와 언체크 예외의 차이를 정확히 알고 적절히 사용하는 게 중요
  • 예외가 발생했을 때 사용자에게 적절한 안내를 제공하는 것도 좋은 프로그램 설계
  • 나중에 커스텀 예외 클래스 만드는 법도 학습하면 좋음
공유하기
이전 글TIL - Java 기초: Optional과 Null 안전하게 다루기다음 글 TIL - Java 기초: 객체지향의 4대 원칙

목차

  • 💬 배운 기술 / 지식
  • 1️⃣ 예외(Exception)란?
  • 2️⃣ 예외 처리 (try-catch)
  • 3️⃣ 예외 클래스 계층 구조
  • 4️⃣ 체크 예외 (Checked Exception)
  • 예제: 파일 읽기에서 발생할 수 있는 IOException 처리
  • 5️⃣ 언체크 예외 (Unchecked Exception)
  • 예제: 0으로 나누기 예외 처리
  • 6️⃣ finally 블록
  • 7️⃣ 예외 던지기: throw 와 throws
  • throw 키워드
  • throws 키워드
  • 8️⃣ 정리 및 주의사항
  • 💡 느낀 점 / 참고 사항

카테고리

Docs

태그

#Java#TIL

최근 글

Git 요약 (1) - Rebase, Stash, Squash MergeTIL - MSA 핵심 요소 정리TIL - (4) Spring 어노테이션 정리: Mockito를 활용한 단위 테스트TIL - (3) Spring 어노테이션 정리: Lombok Getter, Setter와 생성자TIL - (2) Spring MVC와 WebFlux의 차이: 블로킹과 논블로킹