손가락에 무리를 주지 않으면서 “Hello”를 여러 번 말하고 싶다면 어떻게 해야 할까요? 메서드를 정의해야 한답니다.
def h
는 메서드의 정의의 시작입니다. Ruby에게 h
란 이름의 메서드의 정의를
시작한다는 것을 알리는 것이죠. 그 다음 줄은 메서드 몸통(body)입니다. 전에 본 것과
같은 puts "Hello World"
입니다.
마지막으로 end
는 Ruby에게 메서드 정의가 끝났음을 알려줍니다.
=> :h
은 메서드의 정의가 끝났음을 Ruby가 알아들었다는 것을 의미하죠.
Ruby 2.0이나 그 이전 버전이라면 이 반환 값은 => nil
이 될 수도 있습니다.
하지만 여기에서는 별로 중요하지 않으니 다음으로 넘어갑시다.
이제 정의한 메서드를 몇 번 호출해 보겠습니다.
생각보다 쉽지 않나요? Ruby에서 메서드를 호출하는 것은 단지 메서드 이름을 입력하는 것에 지나지 않지요. 메서드가 인자를 받지 않는다면, 그걸로 충분하답니다. 빈 괄호를 입력해도 되지만, 필요한 것은 아니랍니다.
온 세상에 “Hello”라고 외치는 대신에 특정 사람에게 인사를 건네고 싶다면 어떻게 해야
할까요? 사람 이름을 매개 변수로 받도록 h
를 다시 정의하면 됩니다.
생각처럼 잘 동작되는군요. 조금 더 자세히 들여다 보도록 하지요.
문자열의 중간에 자리를 잡아두기
#\{name}
부분은 무엇이냐구요? Ruby에서 문자열 중간에 무엇을 삽입하는 방법입니다.
중괄호 사이의 부분이 문자열로 변환되어 (이미 문자열이 아니라면) 전체 문자열의 그
지점에 삽입되는 것이지요. 사람 이름의 첫 글자를 대문자로 만들어주는 것도 가능합니다.
몇 가지 눈에 띄는 것이 있을 겁니다. 첫째로 또 괄호를 사용하지 않고 있네요. 의도가
명백하다면 괄호는 단지 선택사항일 뿐이죠. 또 하나의 트릭은 기본 매개 변수로 World
를
사용하고 있는 부분입니다. 이 부분의 의미는 “인자를 넘겨주지 않으면 그 대신
"World"
를 사용하겠다”입니다.
하인 두기
손님의 이름을 기억하고 항상 정중하게 마중과 배웅을 하는 하인을 두는 것은 어떨까요? 객체를 사용하는 것이 좋을 것 같습니다. “Greeter” 클래스를 만들도록 하지요.
새로운 키워드 class
가 나왔군요. 위에서는 새로운 “Greeter” 클래스와 메서드가
정의되고 있습니다. 또 @name
도 보이네요. 이는 인스턴스 변수로 모든 메서드에서
접근이 가능합니다. 보다시피 say_hi
와 say_bye
에서 사용되고 있습니다.
어떻게 이 “Greeter” 클래스를 사용하냐구요? 객체를 만들면 됩니다.