코드를 체계적으로 구성하는 중요한 방법 중 하나는 네임스페이스를 사용하는 것이에요.
클래스와 모듈은 네임스페이스를 제공해요.
두 메서드의 이름이 충돌할 수 있는데, 서로 다른 네임스페이스에 넣으면 이 문제를 해결할 수 있어요.
네임스페이스는 중첩할 수 있어서, 큰 코드베이스를 구조화하는 데 도움이 돼요.
네임스페이스에 접근할 때는 범위 지정 연산자 ::를 사용해요.
아래 예시는 서로 다른 두 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
독특한 유언 관련 요청을 전문적으로 처리하는 유명한 법률 사무소에서 일하고 있어요.
이 연습 문제에서는 신비로운 금고를 하나 열게 돼요. 유산 집행인으로서, 세 가문이 오랫동안 간직해 온 비밀 코드를 조합해 계좌 번호와 그에 맞는 코드를 알아내게 돼요.
어느 한 가문도 혼자서 금고를 열 수 없도록, 금고는 각 가문의 지식과 마지막 유언에서 알게 된 비밀 조정자를 결합해야만 열 수 있어요.
세 가지 과제가 있고, 모두 가문들이 금고를 열도록 돕는 것과 관련이 있어요.
EstateExecutor라는 네임스페이스를 정의해요.
다음 과제의 코드는 EstateExecutor 네임스페이스의 본문 안에 정의해야 해요.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
이제 중요한 순간이 왔어요. 비밀 계좌 번호를 드러낼 수 있는 비밀 조정자 키를 가진 사람은 오직 한 명뿐이에요.
Integer 비밀 조정자를 인자로 받아 조합된 계좌 번호를 Integer로 반환하는 assemble_account_number(secret_modifier) 메서드를 정의해요.
올바른 번호를 구하려면 세 가문 각각의 bank_number_part를 모두 더해야 해요.
유언장의 지시 사항은 파란색 조각을 모두 더한 다음 빨간색 조각을 모두 더하라고 해요. 그 결과 코드는 두 합을 곱해서 얻어요.
세 가문의 조각을 하나의 Integer 결과로 결합해 결과 코드를 반환하는 assemble_code 메서드를 정의해요.
이 메서드는 인자를 받지 않고, 각 가문의 관련 네임스페이스에 있는 정보만 사용해요.
작성자
Exercism에 가입하고 Ruby 트랙을 개념 21개연습 문제 121개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.