それぞれの違い
Public
Publicメソッドは、クラスの外部から自由にアクセス可能です。
これらはクラスのインターフェースを形成し、外部のコードから利用されることを意図しています。
Rubyでは、クラスで定義されたメソッドはデフォルトでpublicです(ただし、initializeメソッドは例外で、常にprivate)。
Private
Privateメソッドは、そのクラスのインスタンスからのみアクセスできます。
これらのメソッドは、外部のクラスやサブクラスからは直接呼び出すことができません。
Privateメソッドは、レシーバを指定せずに呼び出す必要があります。つまり、selfを明示的に使用してはいけません。
これは、クラスの内部実装の詳細を隠蔽し、外部からの不要な干渉を防ぐために使用されます。
Protected
Protectedメソッドは、同じクラスまたはサブクラスのインスタンスからアクセスできます。
これらは、外部のクラスからは直接アクセスできませんが、同じクラスまたはサブクラス内の他のインスタンスからはアクセス可能です。
Protectedメソッドは、特に比較操作など、インスタンス間での情報の共有が必要な場合に役立ちます。
コードによる違い
class MyClass
# Publicメソッド
def public_method
'This is a public method'
end
# Privateメソッドを定義
private
def private_method
'This is a private method'
end
# Protectedメソッドを定義
protected
def protected_method
'This is a protected method'
end
end
# クラスのインスタンスを作成
instance = MyClass.new
# Publicメソッドの呼び出し
puts instance.public_method # => "This is a public method"
# Privateメソッドの呼び出しを試みる(エラーが発生するはず)
begin
puts instance.private_method
rescue => e
puts e.message # => "private method `private_method' called for #<MyClass:0x0000>"
end
# Protectedメソッドの呼び出しを試みる(エラーが発生するはず)
begin
puts instance.protected_method
rescue => e
puts e.message # => "protected method `protected_method' called for #<MyClass:0x0000>"
end