Ruby에서 예외를 구하는 것이 나쁜 이유

Oluwafisayo Oluwatayo 2024년2월15일
  1. Ruby에서 예외를 구하는 문제
  2. Ruby의 예외에 대한 최상의 접근 방식
  3. 예외를 복구할 수 있는 상황
  4. 결론
Ruby에서 예외를 구하는 것이 나쁜 이유

Ruby의 예외는 프로그램을 실행하려고 할 때 발생하는 오류입니다. 이러한 예외 중 일부는 프로그램 충돌을 일으키므로 문제가 무엇인지, 문제가 어디에서 오는지 알려주므로 어떤 종류의 솔루션을 적용할 수 있는지 알 수 있기 때문에 매우 유용합니다.

Ruby에서 예외를 구하는 문제

예외는 프로그램과 관련된 문제에 대한 포인터 역할을 하기 때문에 좋습니다. 우리는 프로그램 충돌을 일으키는 특정 예외를 잡기 위해 코드 내에서 예외를 구하고 싶은 유혹을 느낄 수 있지만 이것은 해결책이 아니라 문제가 될 수 있습니다.

프로그램이 Ruby에서 실행될 때 Ruby 자체에는 이러한 프로그램 내에서 예외가 있으므로 이러한 예외로 인해 프로그램이 충돌하지 않습니다. 따라서 Ruby에서 예외를 복구하면 코드에서 다음과 같은 문제가 발생합니다.

  1. 예외 구조는 인터럽트를 구조하고 사용자가 Ctrl+C를 사용하여 문제를 종료하는 것을 방지합니다.
  2. SignalException도 구조되어 프로그램이 신호에 응답하지 않게 합니다. 코드 편집기를 강제로 닫아야 합니다.
  3. SyntaxError가 복구되면 Ruby 시스템에서 수행한 평가가 백그라운드에서만 발생합니다.
  4. 구조 예외는 Ruby가 메모리를 할당할 수 없을 때 발생하는 오류인 noMemoryError를 발생시킵니다. 구조할 필요가 없는 불필요한 오류입니다.
  5. 모든 예외가 발생하기 때문에 버그 찾기가 어렵고 프로그램 충돌을 일으킨 실제 예외를 정확히 찾아내기 어렵습니다.

이를 확인하기 위해 이 코드를 실행하고 새 파일을 생성한 다음 이름을 new.rb로 지정합니다.

new.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue Exception
    puts "I can't stop!"
  end
end

구조 예외

I can't stop 무한 루프가 표시되고 Ctrl+C를 사용하여 프로그램을 중지하려고 하면 계속 진행됩니다. 유일한 옵션은 코드 편집기를 완전히 종료하는 것입니다.

Ruby의 예외에 대한 최상의 접근 방식

이제 우리는 예외 구조가 우리 프로그램에서 치명적인 사건으로 이어질 수 있다는 것을 알았습니다. Ruby에서 예외에 접근하는 가장 좋은 방법은 무엇입니까?

  1. 예외를 복구하는 대신 Ruby의 ensure 기능을 활용할 수 있습니다. 이렇게 하면 예외가 발생하더라도 코드가 실행됩니다.
  2. 여기에서 제기된 예외는 응용 프로그램에 직접 영향을 주는 오류이므로 대신 StandardError를 구출하십시오.

아래 코드 스니펫을 살펴보겠습니다.

new.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue => e
    puts "I can't stop!"
  end
end

이 코드를 실행하면 즉시 구문 오류가 발생합니다.

구조 표준 오류

예외를 복구할 수 있는 상황

예외를 구하는 것이 유용할 수 있는 경우가 있습니다. 예외를 기록하려는 상황에서는 예외를 다시 발생시킬 수 있습니다. 이것은 후속 재방문에 대한 예외를 기록합니다.

사용자가 예외를 처리하는 방법을 알고 있으면 이를 구출하는 것이 안전합니다.

결론

의심의 여지없이 예외는 우리 프로그램의 오류와 버그에 대한 포인터입니다. 프로그램이 업데이트될 때 무엇을 수정해야 하는지 아는 데 유용합니다. 사용자가 어떻게 처리하느냐의 문제일 뿐입니다.

Oluwafisayo Oluwatayo avatar Oluwafisayo Oluwatayo avatar

Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.

LinkedIn