유언장

유언장

학습 연습 문제

소개

네임스페이스

코드를 체계적으로 구성하는 중요한 방법 중 하나는 네임스페이스를 사용하는 것이에요. 클래스와 모듈은 네임스페이스를 제공해요. 두 메서드의 이름이 충돌할 수 있는데, 서로 다른 네임스페이스에 넣으면 이 문제를 해결할 수 있어요. 네임스페이스는 중첩할 수 있어서, 큰 코드베이스를 구조화하는 데 도움이 돼요. 네임스페이스에 접근할 때는 범위 지정 연산자 ::를 사용해요.

아래 예시는 서로 다른 두 foo 메서드를 사용하는 방법을 보여줘요. 각 메서드 앞에 자신이 속한 네임스페이스를 붙이면 두 메서드를 함께 사용할 수 있어요.

class MyNamespace
  def self.foo
    44
  end

  class MyInnerNamespace
    def self.baz
      90
    end
  end
end

class MyOtherNamespace
  def self.foo
    -2
  end
end

p MyNamespace::foo + MyOtherNamespace::foo * MyNamespace::MyInnerNamespace::baz  # => -136

네임스페이스는 코드가 실행되는 위치를 기준으로 해석된다는 점에 주의해요. 루트 네임스페이스, 즉 정의된 모든 네임스페이스 밖에 있는 무언가를 가리키려면 ::로 시작해요.

예를 들어 볼까요?

class Example
  def self.example
    5
  end
end

class MyNamespace

  class Example
    def self.example
      10
    end
  end

  def self.call_example
    p Example::example  # => 10
    p ::Example::example  # => 5
  end
end

지침

독특한 유언 관련 요청을 전문적으로 처리하는 유명한 법률 사무소에서 일하고 있어요.

이 연습 문제에서는 신비로운 금고를 하나 열게 돼요. 유산 집행인으로서, 세 가문이 오랫동안 간직해 온 비밀 코드를 조합해 계좌 번호와 그에 맞는 코드를 알아내게 돼요.

어느 한 가문도 혼자서 금고를 열 수 없도록, 금고는 각 가문의 지식과 마지막 유언에서 알게 된 비밀 조정자를 결합해야만 열 수 있어요.

세 가지 과제가 있고, 모두 가문들이 금고를 열도록 돕는 것과 관련이 있어요.

1. 가문들 앞에 자리를 잡고 서류를 펼쳐요

EstateExecutor라는 네임스페이스를 정의해요. 다음 과제의 코드는 EstateExecutor 네임스페이스의 본문 안에 정의해야 해요.

class SomeName
  # The space between the class/module name
  # and the `end` keyword
  # is called body of the  namespace.
end

2. 비밀 계좌 번호를 찾아요

이제 중요한 순간이 왔어요. 비밀 계좌 번호를 드러낼 수 있는 비밀 조정자 키를 가진 사람은 오직 한 명뿐이에요.

Integer 비밀 조정자를 인자로 받아 조합된 계좌 번호를 Integer로 반환하는 assemble_account_number(secret_modifier) 메서드를 정의해요.

올바른 번호를 구하려면 세 가문 각각의 bank_number_part를 모두 더해야 해요.

3. 마지막 단계: 비밀 코드를 입력해요

유언장의 지시 사항은 파란색 조각을 모두 더한 다음 빨간색 조각을 모두 더하라고 해요. 그 결과 코드는 두 합을 곱해서 얻어요.

세 가문의 조각을 하나의 Integer 결과로 결합해 결과 코드를 반환하는 assemble_code 메서드를 정의해요. 이 메서드는 인자를 받지 않고, 각 가문의 관련 네임스페이스에 있는 정보만 사용해요.

출처

작성자

  • @vaeng (원래 C++ 연습 문제)
  • @vaiapatta1985 (Ruby로 옮김)
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Ruby Exercism

유언장 문제를 시작해 볼 준비가 됐나요?

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