Utilityクラスとは?
Utilityクラスは、共通の処理をstatic領域にまとめて、簡単に処理を呼び出すためのクラス
特徴としては以下の内容です
- staticメソッドとstatic変数
- インスタンス化できない
- 状態を持たない
Staticのメリットは何か?
インスタンスを生成せずに呼び出せること
インスタンス生成にかかるオーバーヘッドがなくなるので、インスタンス生成に時間がかかるクラスに有効です
そのため、頻繁に呼び出されるユーティリティメソッドはよくstaticメソッドとして実装されます
状態に依存しないことを保証できること
与えられた引数のみでメソッドの挙動が決まります(振る舞いが変わらない)
つまり副作用が発生しません
Staticを利用するか否かの判断軸
インスタンス毎に持つ意味があるかどうか
インスタンスごとに持つ意味がなければstaticメソッド、あればインスタンスメソッドにすべき
オーバーライドされる予定がない
オーバーライドを前提としたメソッドは、インスタンスメソッドとして定義する必要がある(staticはできない)
状態に依存しないかどうか
属性の参照・変更がなく、引数と戻り値のみで完結する場合のみ使うべき(振る舞いが変わらない場合)
インスタンスの値を変更しなものかですね
参考