質問: クラス変数とクラスメソッドを教えてください みんさんどうもすみません。クラス変数とクラスメソッドなんですが、 何回本を読んでもイマイチ理解できません。クラス変数とクラスメソッド を使うことでなにがメリットなのか教えてください。例えばクラスメソッド の場合はメソッド名の前にオブジェクト名をつけなくていいとか、そういう 便利さのために使うんでしょうか?どうもまだ完全に理解できていないの で詳しい方いらっしゃったらどうか教えてください。よろしくお願いします。
回答: クラスメソッドのメリット、ですか。まともに解説しようとするとなかなか難しいものですね。 順番に考えてみましょう。 クラスメソッドでないメソッドといえば、インスタンスメソッドです(これは普通に使うと思いますが)。 インスタンスメソッドは、インスタンスを操作するためのメソッドです。 同じように、クラスメソッドは、クラスを操作するためのメソッドです。 要は「メソッド」とは、何かの対象を操作するものであって、その対象がインスタンスなのかクラスなのかという違いです。 おそらくこのぐらいの解説はどこにでもあると思うのですが、ピンと来ないのは、「クラスを操作する」と言われてもイメージがわかないからでしょう。 そこで、具体的な例を考えてみます。 ある銀行が、変動金利でお金を貸しているとします。金利はある基準金利+1%で決まるとします。その場合、この銀行には、 ひとつの「融資」クラスと、 複数の「融資」インスタンス があることでしょう。この場合、「基準金利」はクラス変数であり、「基準金利を設定する」メソッドはクラスメソッドとするのが自然です。クラスメソッドで基準金利を設定すると、そのクラスのすべての融資インスタンスの金利が、その基準金利を元に再計算されることでしょう。 こういうふうに、個別のインスタンスではなく、同じクラスのすべてのインスタンスに共通に影響するようなパラメータをクラス変数とし、それを操作するメソッドをクラスメソッドにする、のがクラスメソッドの主要な用途です。 ただ、同じようなことをクラスメソッドを使わずに実装することももちろん可能です。今の例でいえば、基準金利自体をひとつのクラスとして切り出してしまい、融資インスタンスが基準金利インスタンスを参照するような設計も可能でしょう。 たとえば、「顧客のランクによって3種類の異なる基準金利を適用したい」というような場合はそうするほうがよいかもしれません。 どちらがよいかは、ま、好きなほうを使えばよいのではないでしょうか。