try-catch 비용

sojw·2025년 5월 9일

try-catch 가 비용이 드는 이유: 컴파일 타임에 코드를 정렬하고 최적화해야 하는데, 이는 exception이 어느 시점에서 발생하더라도 일련의 순서대로 코드가 실행된 것처럼 보여져야하는 작업이다. 그리고 try-catch 블럭이 있을때 이러한 작업은 비용이 많이 들 수 있고 최적화가 되지 않는 경우가 있다고 한다

  • 비용의 발생 시점:
    예외가 실제로 throw 되어 catch 되는 경우, 스택 언와인딩이나 예외 객체 생성 등에서 상당한 비용이 발생합니다. 하지만 예외가 발생하지 않는 일반 실행 경로에서는 대부분의 최신 컴파일러(C++, Java, C# 등)가 'zero-cost' 혹은 최소 비용의 예외 처리 메커니즘을 사용합니다.

  • 최적화:
    현대의 컴파일러는 try-catch 블록이 실행 흐름에 영향을 주지 않도록 코드 배치와 최적화를 진행합니다. 따라서 try-catch 블록이 있다고 해서 일반 코드 실행 속도가 느려지지는 않습니다.

  • 정상 실행 경로:
    try-catch 블록이 존재하더라도 예외가 발생하지 않으면, 현대 컴파일러가 이를 최적화하여 실행 성능에 거의 영향을 주지 않습니다.

  • 예외 발생 시:
    실제로 예외가 발생하면 예외 객체 생성, 스택 언와인딩 등 추가 작업이 필요해져서 성능에 비용이 발생합니다.

  • 사용 권장:
    예외 처리는 예외적인 상황에서만 사용해야 하며, 정상적인 흐름에서는 남발하지 않는 것이 좋습니다.

0개의 댓글