트랙
/
Ruby
Ruby
/
연습 문제
/
간단한 계산기
간단한 계산기

간단한 계산기

학습 연습 문제

소개

다른 많은 언어에서 그렇듯이, Ruby에서도 예외는 예상치 못한 상황에 대처하는 방법을 제공해요. 프로그램이 중단되지 않도록 하려면 예외를 제대로 처리하는 것이 중요해요.

예외가 발생하면, 직접 발생시킨 것이든 Ruby 인터프리터가 발생시킨 것이든, 프로그램은 정상적인 실행을 멈추고 결국 오류 메시지와 함께 종료돼요.

raise ArgumentError.new("Something went wrong!")
=> Traceback (most recent call last):
.
.
ArgumentError (Something went wrong!)
1/0
=> Traceback (most recent call last):
.
.
ZeroDivisionError (divided by 0)

이렇게 종료되는 과정을 막고 싶다면 예외에 반응해야 해요. 이것을 예외를 "구조한다"고 해요.

begin
  # ...any code that raises an exception
rescue
  puts 'Got an exception'
end

이 프로그램은 중단되지 않고 "Got an exception"을 출력해요. 종료하는 대신 Ruby는 rescue 블록의 코드를 실행하고, 그 코드가 메시지를 출력해요.

Ruby의 모든 것과 마찬가지로 예외도 객체이고, 보통 예외에 대한 데이터를 담고 있어요. 다음은 예외 객체를 얻는 방법이에요.

begin
  # ...any code that raises an exception
rescue => e
  puts "Exception class: #{ e.class.name }"
  puts "Exception Message:#{e.message}"
end

Ruby에서는 직접 예외를 발생시킬 수도 있어요. 예를 들면 이렇게요.

begin
  raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
  puts e.message
end

앞에서 본 예외는 Ruby에 내장된 예외 중 하나지만, 직접 사용자 정의 예외를 정의하고 발생시킬 수도 있어요.

class CustomError < StandardError
end

raise CustomError.new("Something went wrong")

지침

이 연습 문제에서는 간단한 계산기를 위한 오류 처리를 만들어 봐요.

목표는 인자 16, 51, +가 주어졌을 때 16 + 51 = 67 같은 패턴의 문자열을 반환하는, 제대로 동작하는 계산기를 만드는 거예요.

SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"

1. calculate 메서드 안에서 오류가 발생할 수 있는 코드를 처리해요

이번 과제에서 구현할 핵심 메서드는 클래스 메서드인 SimpleCalculator.calculate()예요. 이 메서드는 세 개의 인자를 받아요. 처음 두 인자는 연산을 수행할 숫자예요. 세 번째 인자는 문자열 타입이고, 이 연습 문제에서는 다음 연산들을 구현해야 해요:

  • + 문자열을 사용한 덧셈
  • * 문자열을 사용한 곱셈
  • / 문자열을 사용한 나눗셈

2. 허용되지 않는 연산을 처리해요

알 수 없는 연산 기호에 대해서는 UnsupportedOperation 예외를 발생시키도록 SimpleCalculator.calculate() 메서드를 수정해요.

SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
Note

이 연습 문제에서는 특정 스코프에 대한 UnsupportedOperation 예외를 정의해야 해요.

3. 잘못된 인자를 처리해요

잘못된 인자 타입에 대해서는 ArgumentError 예외를 발생시키도록 SimpleCalculator.calculate() 메서드를 수정해요.

SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError

4. DivideByZero 예외를 처리해요

ZeroDivisionError 예외를 처리하도록 SimpleCalculator.calculate()를 수정해요. 처리 코드는 Division by zero is not allowed.라는 내용의 문자열을 반환해야 해요. 그 밖의 다른 예외는 SimpleCalculator.calculate() 메서드에서 처리하면 안 돼요.

SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Ruby Exercism

간단한 계산기 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Ruby 트랙을 개념 21개연습 문제 121개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.