Ruby의 상속에 대하여
9497 단어 프로그래밍 공부 일기루비상속
프로그래밍 공부 일기
2020년 7월 11일 Progate Lv.175
루비 V
상속
클래스를 1부터 만들 수도 있지만, 이미 있는 클래스를 이용해 그 클래스를 바탕으로 새로운 클래스를 만들 수 있다. 그렇게 함으로써 공통 부분을 정리할 수 있어 효율적으로 코드를 쓸 수 있다.
한 클래스를 바탕으로 새로운 클래스를 만드는 것을 계승이라고 한다. class 新しいクラス名 < 元となるクラス名
에서 다른 클래스를 상속하여 새 클래스를 정의할 수 있습니다. 새로운 클래스는 「아이 클래스」, 원래가 되는 클래스는 「부모 클래스」라고 한다.
부모 클래스의 인스턴스 메소드가 계승된다.
food.rbrequire "./menu"
class Food < Menu
end
자식 클래스의 인스턴스가 상속되면 자식 클래스는 부모 클래스의 인스턴스 메서드를 상속받습니다.
index.rbfood1=Food.new
puts food1.name
puts food2.info
menu.rbclass Menu
attr_accessor :name
#処理
def info
return "#{self.name} #{self.price}円"
end
end
인스턴스 변수 추가
자식 클래스에 인스턴스 변수를 추가하려면 지금까지와 같이 attr_accessor
를 사용한다.
menu.rbclass Menu
attr_accessor :name
attr_accessor :price
end
Food 클래스는 Menu 클래스를 상속하고 있기 때문에. "name, price, calorie"의 세 가지 인스턴스 변수가 있습니다.
food.rbclass Food < Menu
#Foodクラスにcalorieを追加する
attr_accessor :calorie
end
마찬가지로 인스턴스 메소드도 추가할 수 있다.
오버라이드
부모에 있는 메소드와 같은 이름의 메소드를 아이 클래스로 정의하면, 메소드를 덧쓰기할 수 있다. 이것을 오버라이드라고 한다.
index.rb (메소드 호출)food1~Food.new(...)
food1.calorie=700
puts food1.info
menu.rb (부모 클래스)class Menu
#処理
def info
#処理
end
end
food.rb (자식 클래스)class Food < Menu
#処理
#メソッドの上書き(上書きしたメソッドが呼び出される)
def info
#処理
end
end
자식 클래스의 인스턴스는 자식 클래스에서 정의한 메서드를 우선적으로 호출한다. 따라서 자식 클래스와 부모 클래스에 같은 이름의 메서드가 있으면 자식 클래스의 메서드 내용을 덮어 씁니다. initialize 메소드에서도 재정의가 가능하다.
슈퍼
오버라이드(override) 한 메소드 중에서 super
로 하는 것으로, 부모 클래스의 같은 이름의 메소드를 호출할 수 있다. super에서는 메소드를 호출하고 있으므로, 부모 클래스의 메소드에 맞추어 super에 대해서 인수를 건네줄 필요가 있다.
menu.rbclass Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
food.jsclass Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
Date 클래스
날짜를 다루는 클래스. Date 클래스는 Ruby가 이미 준비하고 있는 클래스로, require
로 date를 읽어들여 클래스를 정의하지 않아도 사용할 수 있다. 이미 준비되어 있는 클래스는 다른 것과는 require 의 작성 방법이 다르다
index.rb# "/date"ではない!
reruire "date"
Date 클래스의 인스턴스
Date.new
로 인스턴스를 생성할 수 있다. Date.today
에서 오늘 날짜의 인스턴스를 만들 수 있습니다.
index.rbrequire "date"
#引数に「年・月・日」を渡してDateメソッドを作成
date1=Date.new(2020,7,8)
puts date
콘솔2020-07-08
Date 클래스의 인스턴스 메서드
많은 인스턴스 메소드가 있다. 일요일인지 아닌지를 진위치로 건네주는 것은 sunday?
메소드.
index.rbrequire "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
콘솔false
클래스 메소드
클래스에 대해 호출하는 메소드. Date.today
의 today
사촌. 클래스 메소드는 def クラス名.メソッド名
로 하는 것으로 정의할 수 있다. 인스턴스 메서드와 달리 메서드 이름 앞에 클래스 이름을 씁니다.
클래스 메소드의 호출은, クラス名.メソッド名
로 한다.
menu.rbclass Menu
#処理
#今日の日付が日曜日かどうかを真偽値で返す
def Menu.is_discount_day?
#今日の日付の情報を持つDateインスタンス
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
인스턴스 메소드에서 클래스 메소드 호출
menu.rbclass Menu
#処理
def get_total_price #インスタンスメソッド
if Menu.discount_day? #クラスメソッドの呼び出し
#処理
end
end
end
Reference
이 문제에 관하여(Ruby의 상속에 대하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/8d88337e5fc1537acf9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
클래스를 1부터 만들 수도 있지만, 이미 있는 클래스를 이용해 그 클래스를 바탕으로 새로운 클래스를 만들 수 있다. 그렇게 함으로써 공통 부분을 정리할 수 있어 효율적으로 코드를 쓸 수 있다.
한 클래스를 바탕으로 새로운 클래스를 만드는 것을 계승이라고 한다.
class 新しいクラス名 < 元となるクラス名
에서 다른 클래스를 상속하여 새 클래스를 정의할 수 있습니다. 새로운 클래스는 「아이 클래스」, 원래가 되는 클래스는 「부모 클래스」라고 한다.부모 클래스의 인스턴스 메소드가 계승된다.
food.rb
require "./menu"
class Food < Menu
end
자식 클래스의 인스턴스가 상속되면 자식 클래스는 부모 클래스의 인스턴스 메서드를 상속받습니다.
index.rb
food1=Food.new
puts food1.name
puts food2.info
menu.rb
class Menu
attr_accessor :name
#処理
def info
return "#{self.name} #{self.price}円"
end
end
인스턴스 변수 추가
자식 클래스에 인스턴스 변수를 추가하려면 지금까지와 같이 attr_accessor
를 사용한다.
menu.rbclass Menu
attr_accessor :name
attr_accessor :price
end
Food 클래스는 Menu 클래스를 상속하고 있기 때문에. "name, price, calorie"의 세 가지 인스턴스 변수가 있습니다.
food.rbclass Food < Menu
#Foodクラスにcalorieを追加する
attr_accessor :calorie
end
마찬가지로 인스턴스 메소드도 추가할 수 있다.
오버라이드
부모에 있는 메소드와 같은 이름의 메소드를 아이 클래스로 정의하면, 메소드를 덧쓰기할 수 있다. 이것을 오버라이드라고 한다.
index.rb (메소드 호출)food1~Food.new(...)
food1.calorie=700
puts food1.info
menu.rb (부모 클래스)class Menu
#処理
def info
#処理
end
end
food.rb (자식 클래스)class Food < Menu
#処理
#メソッドの上書き(上書きしたメソッドが呼び出される)
def info
#処理
end
end
자식 클래스의 인스턴스는 자식 클래스에서 정의한 메서드를 우선적으로 호출한다. 따라서 자식 클래스와 부모 클래스에 같은 이름의 메서드가 있으면 자식 클래스의 메서드 내용을 덮어 씁니다. initialize 메소드에서도 재정의가 가능하다.
슈퍼
오버라이드(override) 한 메소드 중에서 super
로 하는 것으로, 부모 클래스의 같은 이름의 메소드를 호출할 수 있다. super에서는 메소드를 호출하고 있으므로, 부모 클래스의 메소드에 맞추어 super에 대해서 인수를 건네줄 필요가 있다.
menu.rbclass Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
food.jsclass Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
Date 클래스
날짜를 다루는 클래스. Date 클래스는 Ruby가 이미 준비하고 있는 클래스로, require
로 date를 읽어들여 클래스를 정의하지 않아도 사용할 수 있다. 이미 준비되어 있는 클래스는 다른 것과는 require 의 작성 방법이 다르다
index.rb# "/date"ではない!
reruire "date"
Date 클래스의 인스턴스
Date.new
로 인스턴스를 생성할 수 있다. Date.today
에서 오늘 날짜의 인스턴스를 만들 수 있습니다.
index.rbrequire "date"
#引数に「年・月・日」を渡してDateメソッドを作成
date1=Date.new(2020,7,8)
puts date
콘솔2020-07-08
Date 클래스의 인스턴스 메서드
많은 인스턴스 메소드가 있다. 일요일인지 아닌지를 진위치로 건네주는 것은 sunday?
메소드.
index.rbrequire "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
콘솔false
클래스 메소드
클래스에 대해 호출하는 메소드. Date.today
의 today
사촌. 클래스 메소드는 def クラス名.メソッド名
로 하는 것으로 정의할 수 있다. 인스턴스 메서드와 달리 메서드 이름 앞에 클래스 이름을 씁니다.
클래스 메소드의 호출은, クラス名.メソッド名
로 한다.
menu.rbclass Menu
#処理
#今日の日付が日曜日かどうかを真偽値で返す
def Menu.is_discount_day?
#今日の日付の情報を持つDateインスタンス
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
인스턴스 메소드에서 클래스 메소드 호출
menu.rbclass Menu
#処理
def get_total_price #インスタンスメソッド
if Menu.discount_day? #クラスメソッドの呼び出し
#処理
end
end
end
Reference
이 문제에 관하여(Ruby의 상속에 대하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/8d88337e5fc1537acf9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Menu
attr_accessor :name
attr_accessor :price
end
class Food < Menu
#Foodクラスにcalorieを追加する
attr_accessor :calorie
end
부모에 있는 메소드와 같은 이름의 메소드를 아이 클래스로 정의하면, 메소드를 덧쓰기할 수 있다. 이것을 오버라이드라고 한다.
index.rb (메소드 호출)
food1~Food.new(...)
food1.calorie=700
puts food1.info
menu.rb (부모 클래스)
class Menu
#処理
def info
#処理
end
end
food.rb (자식 클래스)
class Food < Menu
#処理
#メソッドの上書き(上書きしたメソッドが呼び出される)
def info
#処理
end
end
자식 클래스의 인스턴스는 자식 클래스에서 정의한 메서드를 우선적으로 호출한다. 따라서 자식 클래스와 부모 클래스에 같은 이름의 메서드가 있으면 자식 클래스의 메서드 내용을 덮어 씁니다. initialize 메소드에서도 재정의가 가능하다.
슈퍼
오버라이드(override) 한 메소드 중에서 super
로 하는 것으로, 부모 클래스의 같은 이름의 메소드를 호출할 수 있다. super에서는 메소드를 호출하고 있으므로, 부모 클래스의 메소드에 맞추어 super에 대해서 인수를 건네줄 필요가 있다.
menu.rbclass Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
food.jsclass Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
Date 클래스
날짜를 다루는 클래스. Date 클래스는 Ruby가 이미 준비하고 있는 클래스로, require
로 date를 읽어들여 클래스를 정의하지 않아도 사용할 수 있다. 이미 준비되어 있는 클래스는 다른 것과는 require 의 작성 방법이 다르다
index.rb# "/date"ではない!
reruire "date"
Date 클래스의 인스턴스
Date.new
로 인스턴스를 생성할 수 있다. Date.today
에서 오늘 날짜의 인스턴스를 만들 수 있습니다.
index.rbrequire "date"
#引数に「年・月・日」を渡してDateメソッドを作成
date1=Date.new(2020,7,8)
puts date
콘솔2020-07-08
Date 클래스의 인스턴스 메서드
많은 인스턴스 메소드가 있다. 일요일인지 아닌지를 진위치로 건네주는 것은 sunday?
메소드.
index.rbrequire "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
콘솔false
클래스 메소드
클래스에 대해 호출하는 메소드. Date.today
의 today
사촌. 클래스 메소드는 def クラス名.メソッド名
로 하는 것으로 정의할 수 있다. 인스턴스 메서드와 달리 메서드 이름 앞에 클래스 이름을 씁니다.
클래스 메소드의 호출은, クラス名.メソッド名
로 한다.
menu.rbclass Menu
#処理
#今日の日付が日曜日かどうかを真偽値で返す
def Menu.is_discount_day?
#今日の日付の情報を持つDateインスタンス
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
인스턴스 메소드에서 클래스 메소드 호출
menu.rbclass Menu
#処理
def get_total_price #インスタンスメソッド
if Menu.discount_day? #クラスメソッドの呼び出し
#処理
end
end
end
Reference
이 문제에 관하여(Ruby의 상속에 대하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/8d88337e5fc1537acf9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
class Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
날짜를 다루는 클래스. Date 클래스는 Ruby가 이미 준비하고 있는 클래스로,
require
로 date를 읽어들여 클래스를 정의하지 않아도 사용할 수 있다. 이미 준비되어 있는 클래스는 다른 것과는 require 의 작성 방법이 다르다index.rb
# "/date"ではない!
reruire "date"
Date 클래스의 인스턴스
Date.new
로 인스턴스를 생성할 수 있다. Date.today
에서 오늘 날짜의 인스턴스를 만들 수 있습니다.index.rb
require "date"
#引数に「年・月・日」を渡してDateメソッドを作成
date1=Date.new(2020,7,8)
puts date
콘솔
2020-07-08
Date 클래스의 인스턴스 메서드
많은 인스턴스 메소드가 있다. 일요일인지 아닌지를 진위치로 건네주는 것은
sunday?
메소드.index.rb
require "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
콘솔
false
클래스 메소드
클래스에 대해 호출하는 메소드. Date.today
의 today
사촌. 클래스 메소드는 def クラス名.メソッド名
로 하는 것으로 정의할 수 있다. 인스턴스 메서드와 달리 메서드 이름 앞에 클래스 이름을 씁니다.
클래스 메소드의 호출은, クラス名.メソッド名
로 한다.
menu.rbclass Menu
#処理
#今日の日付が日曜日かどうかを真偽値で返す
def Menu.is_discount_day?
#今日の日付の情報を持つDateインスタンス
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
인스턴스 메소드에서 클래스 메소드 호출
menu.rbclass Menu
#処理
def get_total_price #インスタンスメソッド
if Menu.discount_day? #クラスメソッドの呼び出し
#処理
end
end
end
Reference
이 문제에 관하여(Ruby의 상속에 대하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/8d88337e5fc1537acf9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Menu
#処理
#今日の日付が日曜日かどうかを真偽値で返す
def Menu.is_discount_day?
#今日の日付の情報を持つDateインスタンス
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
class Menu
#処理
def get_total_price #インスタンスメソッド
if Menu.discount_day? #クラスメソッドの呼び出し
#処理
end
end
end
Reference
이 문제에 관하여(Ruby의 상속에 대하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mzmz__02/items/8d88337e5fc1537acf9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)