オーバーライド(Override)とモンキーパッチ(Monkey Patch)は、どちらも既存のコードの挙動を変更する方法ですか、
使用される文脈と目的において全く違う振る舞いをするよと教えてもらったのでまとめてみました。
オーバーライド
オーバーライドは、主に継承で使用され、
サブクラスがスーパークラスで定義されたメソッドを再定義することを指します。
具体例
class Animal
def speak
"Some sound"
end
end
class Dog < Animal
def speak
"Bark"
end
end
dog = Dog.new
puts dog.speak # 出力: "Bark"
この例では、Dog
クラスがAnimal
クラスのspeak
メソッドをオーバーライドしています。
モンキーパッチ
モンキーパッチは、既存のクラスやモジュールに新しいメソッドを追加したり、既存のメソッドを変更したりするために使われます。モンキーパッチは、継承とは関係なく、直接的に既存のクラスやモジュールを変更します。
具体例
class String
def shout
"#{self.upcase}!"
end
end
puts "hello".shout # 出力: "HELLO!"
この例では、既存のString
クラスにshout
メソッドをモンキーパッチとして追加
違い
- 使用される文脈: オーバーライドは継承の一環として使用されますが、モンキーパッチは既存のクラスやモジュールを直接変更するために使われます。
- 目的と影響範囲: オーバーライドはサブクラスの挙動をカスタマイズするために使用され、一方、モンキーパッチは既存のクラス自体を変更し、そのクラスのすべてのインスタンスに影響を与えます。