클래스 메서드
Coddy Ruby 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 12번째.
클래스 메서드는 하나의 인스턴스가 아니라 클래스에 속합니다. 클래스 본문에서 self는 클래스이므로 def self.name은 클래스에 메서드를 정의합니다. 클래스 자체에서 호출합니다:
class Temperature
def self.to_fahrenheit(celsius)
celsius * 9 / 5.0 + 32
end
end
puts Temperature.to_fahrenheit(100)
puts Temperature.to_fahrenheit(-40)출력:
212.0
-40.0클래스 메서드와 인스턴스 메서드는 서로 다른 곳에 존재합니다. 인스턴스는 클래스 메서드를 직접 호출할 수 없으며, self.class 또는 클래스 이름을 통해 접근합니다:
class Circle
def self.area_for(r)
(3.14159 * r * r).round(2)
end
def initialize(r)
@r = r
end
def area
self.class.area_for(@r)
end
end
puts Circle.area_for(1)
puts Circle.new(2).area
begin
Circle.new(2).area_for(2)
rescue NoMethodError => e
puts e.message
end출력:
3.14
12.57
undefined method `area_for' for an instance of Circleclass << self는 클래스 본문의 한 섹션을 열며, 그 안의 모든 def는 클래스 메서드가 됩니다. 클래스에 이러한 메서드가 여러 개 있을 때 self.를 작성하는 수고를 덜 수 있습니다:
class Units
class << self
def km_to_miles(km)
(km * 0.621371).round(1)
end
def miles_to_km(miles)
(miles / 0.621371).round(1)
end
end
end
puts Units.km_to_miles(10)
puts Units.miles_to_km(26.2)출력:
6.2
42.2단위 변환, 텍스트를 객체로 구문 분석하거나 모든 인스턴스의 개수를 세는 것처럼 특정 객체 하나가 아니라 해당 종류의 것에 속하는 작업에는 클래스 메서드를 사용하세요. 한 객체의 데이터가 필요한 작업은 인스턴스 메서드로 유지하세요:
class Invoice
def self.tax_rate # 모든 인보이스에 동일함
0.2
end
def tax # 이 인보이스의 금액이 필요함
@amount * Invoice.tax_rate
end
end챌린지
쉬움Temperature 클래스의 메서드를 완성하세요. to_fahrenheit(c)와 to_celsius(f)는 값을 변환합니다. feel(celsius)은 0 미만이면 freezing, 15 미만이면 cold, 25 미만이면 mild, 그 외에는 hot을 반환합니다. convert(text)는 20 C 또는 68 F와 같은 텍스트를 받아 20.0 C = 68.0 F (mild) 또는 68.0 F = 20.0 C (mild)를 반환합니다. 결과에는 소수점 이하 한 자리가 표시되며 섭씨 값의 상태가 포함됩니다. 이 메서드는 다른 클래스 메서드를 사용합니다.
제공된 코드는 모든 입력 줄에 대해 Temperature.convert(line)을 호출하고 결과를 출력합니다. Temperature의 인스턴스는 생성되지 않습니다.
코드는 temperature.rb에 작성하세요. main.rb에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.
직접 해보기
require_relative 'temperature'
# 제공된 입력/출력 코드: 그대로 유지하세요
input = []
while (line = gets)
input << line.chomp
end
input.each { |line| puts Temperature.convert(line) }
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러