シングルトンオブジェクト

Scalaにおける**シングルトンオブジェクト(Singleton Object)**とは、クラスのインスタンスを1つだけ作成し、それをグローバルに共有したい場合に使用される構文で、objectキーワードを使って定義されます。これはScalaのオブジェクト指向機能の一部であり、Javaでのstaticメンバーの代替手段ともなります。


特徴

1. インスタンスは1つだけ

objectで定義されたシングルトンオブジェクトは、JVM上で1つのインスタンスだけが生成され、プログラム全体で共有されます。

2. newキーワードは不要

通常のクラスとは異なり、objectnewでインスタンス化することはできません。すでに作成されたインスタンスが自動的に使われます。

3. グローバルなユーティリティとして使用

Javaのstaticメソッドやstatic変数のように、ユーティリティ関数や定数を定義するためによく使われます。


基本構文と例

scala
object MathUtils { def square(x: Int): Int = x * x val Pi = 3.1415 }

上記のようにobjectを定義すると、次のように使用できます:

scala
val result = MathUtils.square(5) // 結果は25 val piValue = MathUtils.Pi // 結果は3.1415

クラスとの違い

Scalaにはclassobjectがあり、それぞれ用途が異なります。

キーワード インスタンス化 用途
class 必要 (new) データ構造やロジック
object 不要 シングルトン・ユーティリティ

コンパニオンオブジェクトとの関係

classと同じ名前のobjectコンパニオンオブジェクト(companion object)と呼びます。これは、クラスのprivateメンバーにアクセスできる特別なオブジェクトです。

scala
class Person private (val name: String) object Person { def apply(name: String): Person = new Person(name) }

このようにapplyメソッドを用意することで、次のように簡潔にインスタンス化できます:

scala
val p = Person("Taro") // applyが呼び出される

まとめ

  • objectはScalaにおけるシングルトンの構文で、インスタンスは1つのみ。

  • staticの代替として使われ、ユーティリティ的な機能を提供する。

  • classと同名のobjectはコンパニオンオブジェクトとして、クラスの補助的な役割を担う。

  • objectは明示的にインスタンス化せずにそのまま使用できる。

生成日:2025/05/04