손가락에 무리를 주지 않으면서 “Hello”를 여러번 말고 싶다면 어떻게 해야 할까요? 메서드를 정해야 한답니다.
irb(main):010:0> def h
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> nil
“def h”가 바로 메서드 정를 시작한답니다. 루비에게 우리가 “h”란 이름 메서드 정를 시작한다는 것을 알리는 것이죠. 그 다음줄은 메서드 바디(body)입니다. 마지막으로 “end”는 루비에게 메서드 정가 끝났음을 알려줍니다. ”=> nil”은 메서드 정가 끝났음을 루비가 알아들었다는 것을 미죠.
메서드 일시적이고 복적인 삶
이제 정한 메서드를 몇번 출해 보겠습니다.
irb(main):013:0> h
Hello World!
=> nil
irb(main):014:0> h()
Hello World!
=> nil
생각보다 쉽지 않요? 루비에서 메서드를 출는 것은 단지 메서드 이름을 입력는 것에 지지 않지요. 메서드가 인자를 받지 않는다면, 그걸로 충분답니다. 빈 괄를 입력해도 지만, 필요한 것은 아니랍니다.
세상에 “Hello”라고 외는 대신에 특정 사람에게 인사를 건네고 싶다면 어떻게 해야 할까요? 사람 이름을 인자로 받도록 “h”를 다시 정면 됩니다.
irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> nil
irb(main):018:0> h("Matz")
Hello Matz!
=> nil
생각럼 동작는군요. 조금 더 자세히 들여다 보도록 지요.
문자열 중간에 자리를 잡아두기
”#{name}” 부분은 무엇이냐구요? 루비에서 문자열 중간에 무엇을 삽입는 방법이랍니다. 중괄 사이 부분이 문자열로 변어 (이미 문자열이 아니라면) 전체 문자열 그 지점에 삽입는 것이지요. 사람 이름 첫글자를 대문자로 만들어주는 것도 가능합니다.
irb(main):019:0> def h(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> nil
irb(main):022:0> h "chris"
Hello Chris!
=> nil
irb(main):023:0> h
Hello World!
=> nil
몇가지 눈 띄는 것이 있을 겁니다. 첫째로 괄를 사용지 않고 있네요. 도가 명백다면 괄는 단지 선택사항에 불과할 뿐이죠. 두번째로 디폴트 인자 “World”를 사용고 있습니다. 즉 인자를 겨주지 않으면 “World”가 대신 사용는 것이지요.
인 두기
손 이름을 기억고 항상 정중게 마중과 배웅을 는 인을 두는 것은 어떨까요? 객체를 사용는 것이 좋을 것 같습니다. “Greeter” 클스를 만들도록 지요.
irb(main):024:0> class Greeter
irb(main):025:1> def initialize(name = "World")
irb(main):026:2> @name = name
irb(main):027:2> end
irb(main):028:1> def say_hi
irb(main):029:2> puts "Hi #{@name}!"
irb(main):030:2> end
irb(main):031:1> def say_bye
irb(main):032:2> puts "Bye #{@name}, come back soon."
irb(main):033:2> end
irb(main):034:1> end
=> nil
새로운 키워드은 “class”가 왔군요. 위에서는 새로운 “Greeter” 클스와 여럿 메서드가 정고 있습니다. 한 ”@name”이 보이지요. 이는 객체 변로써 모든 메서드에서는 접근이 가능답니다. 보다시피 “say_hi”와 “say_bye”에서 사용고 있습니다.
어떻게 이 “Greeter” 클스를 사용냐구요? 객체를 만들면 됩니다.
forum.rubykr.org rubyforge.org rubyforge.org rubyforge.org rubyforge.org rpple.ikspres.com rubyforge.org radiantcms.org tryruby.hobix.com