Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby에서 사용자 정의 예외(Custom Exception) 만드는 방법

Ruby에서 자신만의 예외(Exception)를 만드는 것은 생각보다 훨씬 간단합니다. 이 글에서는 단계별로 사용자 정의 예외를 생성하고 활용하는 방법을 알아보겠습니다.

1. 새로운 클래스 만들기

Ruby의 모든 것이 그렇듯이, 예외 역시 하나의 클래스입니다. 따라서 새로운 종류의 예외를 만들려면 StandardError 또는 그 하위 클래스를 상속받는 클래스를 정의하기만 하면 됩니다.

class MyError < StandardError
end

raise MyError

관례상 새로운 예외 클래스의 이름은 "Error"로 끝나야 합니다. 또한 커스텀 예외를 모듈(Module) 내부에 넣어두는 것이 좋은 습관으로 여겨집니다. 그렇게 하면 최종적으로 에러 클래스가 ActiveRecord::RecordNotFound, Net::HTTP::ConnectionError처럼 네임스페이스가 포함된 형태가 됩니다.

2. 메시지(Message) 추가하기

Ruby의 모든 예외 객체에는 message 속성이 있습니다. 이것은 예외 이름 옆에 출력되는 좀 더 긴 설명 텍스트입니다.

Ruby에서 사용자 정의 예외(Custom Exception) 만드는 방법 예외 객체의 message 속성 출력 예시

예외를 발생시킬 때(raise) 다음과 같이 메시지를 직접 지정할 수 있습니다.

raise MyError, "My message"

또한 커스텀 에러 클래스에 자체 생성자(initialize)를 추가하면 기본 메시지를 설정할 수도 있습니다.

class MyError < StandardError
  def initialize(msg="My default message")
    super
  end
end

3. 예외에 커스텀 데이터 속성 추가하기

예외 클래스에도 일반 클래스와 똑같은 방식으로 커스텀 데이터를 추가할 수 있습니다. 아래 예제에서는 속성 리더(attr_reader)를 추가하고 생성자를 업데이트해 보겠습니다.

class MyError < StandardError
  attr_reader :thing
  def initialize(msg="My default message", thing="apple")
    @thing = thing
    super(msg)
  end
end

begin
  raise MyError.new("my message", "my thing")
rescue => e
  puts e.thing # "my thing"
end

이것으로 끝입니다! Ruby에서 커스텀 에러나 예외를 만드는 일은 정말 어렵지 않습니다. 다만 한 가지 주의할 점이 있습니다. 위 예제에서 항상 StandardError를 상속받았다는 점을 눈치채셨나요? 이것은 의도적인 것입니다. Ruby에는 Exception이라는 클래스도 존재하지만, 절대로 이 클래스를 직접 상속해서는 안 됩니다. 자세한 내용이 궁금하다면 Exception과 StandardError의 차이점을 다룬 별도의 글을 참고해 보시기 바랍니다.