🧑🏻💻 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 위에 있음) |
반응형