LoginSignup
0
0

オーバライドとモンキーパッチでどう違うねんと思ったので調べた

Posted at

オーバーライド(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メソッドをモンキーパッチとして追加

違い

  • 使用される文脈: オーバーライドは継承の一環として使用されますが、モンキーパッチは既存のクラスやモジュールを直接変更するために使われます。
  • 目的と影響範囲: オーバーライドはサブクラスの挙動をカスタマイズするために使用され、一方、モンキーパッチは既存のクラス自体を変更し、そのクラスのすべてのインスタンスに影響を与えます。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0