🧑🏻‍💻 Programming

[Programming] C++, Java, Python 예외 처리

koko1177 2025. 5. 17. 23:47
반응형

✅ 예외처리 문법

  • try : 예외 발생 가능 코드 
  • catch : 예외 처리 코드
  • finally : 무조건 실행되는 코드
  • throws : 예외를 호출자에게 전달
  • 사용자 정의 예외 : 상황에 맞는 예외 직접 정의

 


1️⃣ C++ 예외 처리 기본

  • try-catch-throw 사용
  • 표준 예외 클래스는 std::exception에서 파생됨
  • 문자열 메시지 전달 시 std::runtime_error 등 사용

 

자주 쓰는 C++ 예외 처리 타입

  • std::runtime_error: 일반 런타임 오류
  • std::logic_error: 논리적 오류
  • std::out_of_range: 벡터/배열 범위 초과
  • std::invalid_argument: 잘못된 인자
  • std::bad_alloc: 메모리 할당 실패
  • std::exception: 모든 예외의 부모 클래스

 

예시 코드 (C++)

#include <iostream>
#include <stdexcept>
using namespace std;

int main() {
    int a = 10, b = 0;

    try {
        if (b == 0) throw runtime_error("0으로 나눌 수 없음");
        cout << a / b << endl;
    } catch (const runtime_error& e) {
        cout << "예외 발생: " << e.what() << endl;
    }

    return 0;
}

 


2️⃣ Java 예외 처리 기본

[Java] SpringBoot&Java 예외 처리 log.error() 설정 및 사용법

 

  • try-catch-finally 사용
  • 예외 클래스는 Exception 클래스 계열에서 파생됨
  • 구체적인 예외 클래스를 사용하는 습관이 좋음
  • 기본 문법 구조
try {
    // 예외 발생 가능성 있는 코드
} catch (Exception e) {		// 예외타입 변수명
    // 예외 처리 코드
    e.printStackTrace();	// 예외 타입 + 메시지 + 코드의 호출 경로까지 전체 출력
} finally {
    // (선택) 무조건 실행되는 코드, 자원 해제용
}

 

자주 쓰는 Java 예외 처리 타입

  • ArithmeticException: 0으로 나눌 때
  • NullPointerException: null 참조 접근
  • ArrayIndexOutOfBoundsException: 배열 인덱스 초과
  • NumberFormatException: 문자열을 숫자로 변환할 때 오류
  • ClassCastException: 잘못된 형변환
  • IllegalArgumentException: 잘못된 인자 전달
  • IOException: 입출력 오류
  • FileNotFoundException: 파일 없음
  • InterruptedException: 스레드 인터럽트
  • SQLException: DB 오류

 

예시 코드 (Java)

try {
    int[] nums = {1, 2, 3};
    System.out.println(nums[3]); // 예외 발생
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("배열 범위를 벗어났습니다.");
}

 


3️⃣ Python 예외 처리 기본

  • try-except-finally 사용
  • except에 구체적인 예외 클래스 쓰는 게 좋음
  • 예외 객체는 Exception 클래스 계열에서 파생됨
  • 기본 문법 구조
try:
    # 예외 발생 가능성 있는 코드
except Exception as e:		# 예외타입 as 변수명
    # 예외 처리 코드
    print("예외 발생:", e)
    traceback.print_exc()	// 예외 타입 + 메시지 + 코드의 호출 경로까지 전체 출력
finally:
    # 항상 실행되는 코드 (선택)
    print("자원 정리 또는 마무리 작업")

 

자주 쓰는 Python 예외 처리 타입

  • ZeroDivisionError: 0으로 나눔
  • IndexError: 리스트 인덱스 초과
  • KeyError: 딕셔너리에 없는 키
  • ValueError: 잘못된 값
  • TypeError: 타입 오류
  • FileNotFoundError: 파일 없음
  • IOError: 입출력 오류
  • ImportError: 모듈 임포트 실패

 

예시 코드 (Python)

try:
    a = 10
    b = 0
    result = a / b
except ZeroDivisionError:
    print("0으로 나눌 수 없음")
finally:
    print("예외 여부와 관계없이 실행됨")

 


4️⃣ 세 언어 비교 요약

항목 C++ Java Python
예외 키워드 try-catch-throw try-catch-finally try-except-finally
루트 예외 std::exception Exception Exception (BaseException 위에 있음)

 

반응형