프리랜서 웹디자이너 웹퍼블리셔RELATION

[MYSQL PHP 함수] try catch finally

2007.03.02
구분 if-else try-catch-finally
주요 목적 예상 가능한 조건 분기 처리 예측하기 힘든 예외(에러) 상황 처리
작동 방식 조건식이 true인지 false인지 판별해 경로 선택 코드를 일단 실행하고, 에러 발생 시 catch로 점프
성능 상대적으로 빠름 (일반적인 로직 분기) 상대적으로 느림 (예외 객체 생성 및 스택 추적 비용 발생)
사용 예시 로그인 ID/PW 일치 여부, 숫자 범위 체크 등 파일 열기, 네트워크 통신, 0으로 나누기 등 비정상 상황


상세 설명


1. if-else (조건문)
  • 역할: "이 조건이 맞으면 A를 하고, 아니면 B를 해라"처럼 미터법이나 매뉴얼에 명시된 규칙에 따라 분기할 때 사용합니다.
  • 특징: 프로그램이 정상적으로 진행될 수 있는 범위 내에서, 값의 상태(예: score >= 60)를 미리 체크하여 안전하게 유도합니다. [1, 2]

2. try-catch-finally (예외 처리문)
  • 역할: 코드를 실행하다가 예기치 못한 런타임 에러(예외)가 발생했을 때, 프로그램이 강제로 멈추는(크래시) 것을 막고 수습할 때 사용합니다. [
  • 구성요소:
    • try: 에러가 발생할 가능성이 있는 코드를 넣는 곳.
    • catch: try 블록에서 에러가 발생했을 때 낚아채서(catch) 처리하는 곳.
    • finally: 에러 발생 여부와 상관없이 무조건 마지막에 실행되는 곳 (주로 사용한 파일 닫기, 메모리 해제 등 정리 작업에 사용). 
 
try {
    // 데이터베이스 작업 또는 파일 처리 코드
    throw new PDOException("DB 연결 실패");
    
} catch (PDOException $e) {
    // 1순위: PDOException이 발생하면 여기서 잡히고 종료됨
    echo "데이터베이스 오류: " . $e->getMessage();
    
} catch (RuntimeException $e) {
    // 2순위: 실행 시간 관련 일반 예외
    echo "런타임 오류: " . $e->getMessage();
    
} catch (Exception $e) {
    // 3순위: 위에서 걸러지지 않은 모든 일반 예외 (가장 마지막에 배치)
    echo "기타 일반 오류: " . $e->getMessage();
    
} catch (Throwable $e) {
    // 4순위 (PHP 7+): Exception뿐만 아니라 TypeError 등 시스템 Error까지 모두 포괄
    echo "치명적 시스템 오류: " . $e->getMessage();
}

이름 정체 및 역할 주요 발생 상황 예시
Throwable 가장 큰 우산 (최상위 인터페이스)
Error와 Exception을 모두 아우릅니다. PHP 7부터 도입되었습니다.
시스템 에러든 일반 예외든 모든 종류의 오류를 단 하나도 놓치지 않고 잡고 싶을 때 사용합니다.
Exception 일반 예외의 조상 클래스
개발자가 코드로 복구하거나 안내 메시지를 띄울 수 있는 예외들의 기본 틀입니다.
사용자가 잘못된 값을 입력했거나, 파일을 찾을 수 없을 때 등 일반적인 예외 상황입니다.
RuntimeException 실행 중 발생하는 예외
코드를 작성할 때는 알 수 없고, 실제로 프로그램을 돌려봐야 알 수 있는 예외입니다.
존재하지 않는 경로에 접근, 외부 API 응답 시간 초과, 잘못된 데이터 형식 변환 등입니다.
PDOException DB 전용 예외
PHP의 데이터베이스 접속 도구인 PDO를 사용할 때만 발생하는 매우 구체적인 예외입니다.
DB 비밀번호 오류, 서버 연결 끊김, SQL 문법 오타, 중복된 데이터 삽입 시 발생합니다.


전체목록

이 포스트 공유하기

  • 페이스북에 공유하기
  • 트위터에 공유하기
  • 네이버 블로그 카페에 공유하기
  • 네이버 밴드에 공유하기

코멘트 쓰기

코멘트를 입력해주세요
LOGIN JOIN