[기술정리]예외 처리

송송승현's avatar
Nov 21, 2024
[기술정리]예외 처리

정의

💡
프로그램 실행 중 예상치 못한 오류가 발생했을 때 , 프로그램의 비정상적인 종료를 막고 적절한 대응을 위한 방법
오류가 발생했을 때의 처리 로직을 명확하게 정의할 수 있으며, 이를 통해 사용자 경험을 개선하고 시스템의 안정성을 높임

기본 개념

💡
예외(Exception) - 프로그램 실행 중 발생할 수 있는 오류나 비정상적인 상황
예외 처리(Exception Handling) - 예외가 발생했을 때 이를 적절히 처리하여 프로그램이 정상적으로 실행될 수 있도록 하는 방법

예외의 종류

  • 예외는 일반적으로 Checked Exception과 Unchecked Exception으로 분류

Checked Exception

  • 컴파일 타임에 검사되는 예외
  • 컴파일 시에 반드시 처리되거나 선언되어야 함
  • 개발자는 이러한 예외가 발생할 가능성이 있는 코드 무조건적 예외 처리를 해야함
  • 주요 예시
    • IOException : 파일 입출력 작업에 발생할 수 있는 예외
    • SQLException : 데이터베이스 작업 중 발생할 수 있는 예외
    • ClassNotFoundException : 클래스가 로드되지 않을 때 발생하는 예외

Unchecked Exception

  • 런타임 시에만 검사되는 예외로, 컴파일 타임에는 확인되지 않음
  • 주로 프로그래밍 오류에서 발생, 개발자가 명시적으로 처리하지 않아도 상관X
  • RuntimeException을 상속받는 예외들이 해당
  • 주요 예시
    • NullPointException : 객체가 null인 상태에서 메서드를 호출하려고 할 때 발생
    • ArrayIndexOutOfBoundsException : 배열의 잘못된 인덱스에 접근할 때 발생
    • ArithmeticException : 0으로 나누기와 같은 수학적 오류가 발생할 때 발생

Error

  • 예외외는 다르며, 주로 JVM에서 발생하는 심각한 오류를 의미
  • 보통 애플리케이션에서 복구할 수 없는 상황을 나타냄
  • 주요 예시
    • OutOfMemoryError : JVM 메모리가 부족할 때 발생
    • StackOverflowError : 재귀 호출이 너무 깊어져서 스택이 가득 찼을 때 발생
 

예외처리 메커니즘

예외 직접처리

  • 발생항 예외를 메서드 내에서 try-catch 블록을 사용하여 처리하는 방식
  • 예외가 발생한 시점에서 즉시 예외를 처리하여 프로그램 흐름을 제어
  • try-catch
    • try : 예외가 발생할 수 있는 코드를 감싼다. → try 블록 내에서 예외가 발생하면 catch 블록에서 처리
    • catch : try블록 내에서 발생한 예외를 처리, 여러개의 catch블록을 사용하여 다양한 예외를 처리할 수 있음
    • finally(선택) : 예외 발생 여부와 상관없이 항사 실행되어야하는 코드
  • throw
    • throw : 예외를 명시적으로 발생시킬 때 사용
  • 장점
    • 예외를 발생한 지점에서 즉시 처리하여 코드의 흐름을 간단하게 유지 가능
  • 단점
    • 중복된 예외 처리 코드가 여러 곳에 분산될 수 있음
    • 예외를 적절하게 처리하지 않으면 코드의 가독성이 저하
  • 예제
    • public void readFile(String fileName) { try { FileReader file = new FileReader(fileName); BufferedReader fileInput = new BufferedReader(file); for (int counter = 0; counter < 3; counter++) System.out.println(fileInput.readLine()); fileInput.close(); } catch (IOException e) { System.out.println("예외 발생: " + e.getMessage()); } }

예외 던지기

  • 예외 던지기는 메서드 내에서 예외를 직접 처리하지 않고, 호출한 메서드나 싱위 호출자에게 예외를 전달하는 방식
  • 메서드 시그니쳐에 throws 키워드를 사용하여 예외를 선언, 필요한 경우 throw 키워드 사용
  • 장점
    • 예외 처리를 호출자에게 위임하여 코드의 책임을 분리
    • 공통된 예외 처리를 중앙에서 관리 가능
  • 단점
    • 예외가 전파될 경우 예외 처리가 지연될 수 있음
    • 호출자에게 예외 처리를 강제할 수 있음
  • 예제
    • public void readFile(String fileName) throws IOException { FileReader file = new FileReader(fileName); BufferedReader fileInput = new BufferedReader(file); for (int counter = 0; counter < 3; counter++) System.out.println(fileInput.readLine()); fileInput.close(); } public void processFile() { try { readFile("example.txt"); } catch (IOException e) { System.out.println("예외 발생: " + e.getMessage()); } } public void readFile(String fileName) throws IOException { FileReader file = new FileReader(fileName); BufferedReader fileInput = new BufferedReader(file); for (int counter = 0; counter < 3; counter++) System.out.println(fileInput.readLine()); fileInput.close(); } public void processFile() { try { readFile("example.txt"); } catch (IOException e) { System.out.println("예외 발생: " + e.getMessage()); } }
Share article

송승현의 블로그