1. 메소드 선언하기

  • 메소드를 선언할 때 def키워드를 사용한다.
  • 메소드 이름은 반드시 소문자로 시작해야 한다.
  • 메소드 이름 뒤에 올 수 있는 '이상한'문자들
    • ? : 뭔가를 묻는 메서드( 예 : def instance_of? )
    • ! : '위험'하거나 객체의 값을 바꿔버리는 메소드 ( 예 : def chop!)
    • = : 대입문에 쓸 수 있는 메소드 ( 예 : def duration=(new_duration) )
  • 형식인수를 선언할 때는 괄호 안에 지역 변수를 차례로 적어주면 된다. (형식인수를 둘러싸는 괄호는 필수사항이 아니다.)
  • 메소드 안에 싱클톤이 아닌 클래스나 모듈을 정의해서는 안된다.
  • 메소드 내부에서 다른 메소드를 정의 한다면, 안쪽의 메소드는 바깥의 메소드가 실행될 때 정의 된다.
  • 메소드의 반환값은 마지막으로 실행된 표현식의 결과 값이거나 명시적으로 쓰인 return문의 값이 된다.
  • 메소드의 마지막은 end 키워드로 끝난다.

2. 메소드의 형식인수

# 형식인수가 없다.
def my_new_method
  # 여기에 메소드를 위한 코드를 적는다.
end

# 세개의 형식인수가 있다.
def my_new_method(arg1, arg2, arg3)
  # 여기에 메소드를 위한 코드를 적는다.
end

# 형식인수에 기본값을 정해 줄 수 있다.
def your_name(arg1="박찬호", arg2="김연아", arg3="김태희")
  "#{arg1}, #{arg2}, #{arg3}."
end

puts your_name
puts your_name("김광현")
puts your_name("김광현", "장미란")
puts your_name("김광현", "장미란", "송윤아")
- 실행 결과 -
박찬호, 김연아, 김태희.
김광현, 김연아, 김태희.
김광현, 장미란, 김태희.
김광현, 장미란, 송윤아.
메소드 your_name 안에 보면 문자열 안에  "#{arg1}, #{arg2}, #{arg3}." 에서 처럼 #{변수명} 와 같은 표현식을 사용해서 변수의 값을 출력한다. 또 형식인수에 기본값을 정해 줄 수 있다. 메소드 your_name이 그 예이다.

3. 메소드의 가변 인자 리스트

개수가 정해지지 않은 가변 매개변수를 전달하고 싶을때 형식인수의 이름 앞쪽에 * 를 붙여주면 된다.
가변형식인수는 일반 형식인수 다음의 맨 마지막에 적어줘야 한다.
가변 형식인수
def varargs(arg1, *rest)
  "Got #{arg1} and #{rest.join(', ')}"
end
  
puts varargs("one")
puts varargs("one", "two")
puts varargs("one", "two", "three")
- 실행 결과 -
Got one and
Got one and two
Got one and two, three


※ 위 내용은 데이브토머스 차드파울러 앤디헌트 지음, 강문식, 박지인, 양석호 옮김 『Programming Ruby』 책의 내용을 바탕으로 정리한 것입니다.