[Ruby] 4장 함수 및 메서드

1. Ruby 함수와 메서드

Ruby의 함수와 메서드는 코드의 재사용성을 높이고, 특정 작업을 수행하는 데 사용됩니다. 함수와 메서드의 특징은 다음과 같습니다.

  • 함수의 특징
    • 전역 함수: 루비에서 함수는 기본적으로 전역적으로 사용될 수 있음, 클래스 밖에서 정의된 경우 모든 객체에서 접근이 가능함
    • 독립적인 정의: 함수는 클래스와 관계없이 독립적으로 정의. 필요에 따라서 여러 위치에서 호출할 수 있음
    • 타임 제한 없음: 루비는 동적 타입 언어이기 때문에 매개변수의 타입을 명시할 필요 X, 다양한 타입의 인자를 받을 수 있음
    • 반환 값: 마지막으로 선언된 표현식이 자동으로 반환 return 키워드를 사용하지 않아도 됨

함수를 정의할 때는 def 키워드를 사용해 정의할 수 있습니다. 함수 본문에 반환 값이 필요할 경우 반환합니다.

def add(a,b) 
  return a + b
end 

result = add(5, 3)
puts "합: #{result}" # 출력: 합: 8

2. 메서드 정의

루비에서는 클래스 내부에 메서드를 정의할 수 있습니다. 메서드는 객체의 동작을 정의합니다. 메서드의 특징은 다음과 같습니다. 

  • 객체 지향적: 메서드는 클래스 내에 정의되며, 특정 객체의 동작을 정의함, 메서드는 객체의 상태를 변경하거나 객체와 상호작욛하는 데 사용
  • 인스턴스 메서드와 클래스 메서드: 메서드는 인스턴스 메서드(객체 인스턴스에서 호출)와 클래스 메서드(클래스 자체에서 호출)로 나뉨
  • self 키워드: 메서드 내부에서 self를 사용해 현재 객체를 참조할 수 있음, 클래스 메서드의 경우 self는 클래스 자체를 참조함
  • 블록 사용: 메서드는 블록을 받아 추가적인 기능을 수행할 수 있음, 블록은 메서드의 인라인 함수처럼 동작
  • 오버로딩 없음: 루비는 정적 타입 언어가 아니므로, 메서드 오버로딩을 지원하지 않음, 대신 매게변수의 수나 타입을 체크해 구현할 수 있음
class 클래스이름
  def 메서드이름(매개변수1, 매개변수2)
   # 메서드 본문 
  end 
end
class Calculator
   def add(a,b)
    a + b 
   end 
  end 


calc = Calculator.new 
result = calc.add(5, 3)
puts "result: #{result}" # 출력: result: 8

3. 메서드의 반환 값

루비에서는 마지막으로 평가된 표현식이 자동으로 반환되며, return 키워드를 명시하지 않아도 됩니다.

def multiply(a,b)
  a * b # 마지막 표현식이 자동 반환
end 

puts multiply(5, 5) # 25

4. 기본 매개변수

매서드에 기본 매개변수를 설정할 수 있습니다.

def greet(name = "Guest")
   puts "사용자의 이름: #{name}!"
end 

greet("James") # result: 사용자의 이름: James! 
greet # result: 사용자의 이름: Guest!

5. 가변 인자

가변 인자를 사용해 메서드에 임의의 개수의 인자를 전달할 수 있습니다.

def sum(*numbers)
   numbers.reduce(0, :+)
end 

puts sum(1,2,3) # result: 6
puts sum(1,3,5,7,9) # result: 25

6. 블록과 메서드

루비에서 메서드에 블록을 전달할 수 있습니다. 블록은 메서드의 인라인 함수처럼 동작합니다.

def repeat(n)
  n.times do 
    yield
  end 
end 

repeat(3) { puts "Hello!" }
# result: 
# Hello!
# Hello!
# Hello!

7. 메서드 오버로딩 

루비는 정적 타입 언어가 아니므로, 메서드 오버로딩을 지원하지 않지만, 대신 매개변수의 수나 타입을 체크해 구현할 수 있습니다.

def display(value)
  if value.is_a?(String)
    puts "String(문자열): #{value}"
  elsif value.is_a?(Integer)
    puts "Integer(정수): #{value}"
   end 
end 


display("Hello, World") # result: String: Hello, World
display(42) # result: Integer: 42

 

 

GitHub - set-up-init/ruby-tutorial-tistory: https://thinky.tistory.com/category/Back-End/Ruby

https://thinky.tistory.com/category/Back-End/Ruby. Contribute to set-up-init/ruby-tutorial-tistory development by creating an account on GitHub.

github.com

 

LIST