オブジェクト

Scalaのオブジェクト指向プログラミングにおける「オブジェクト(object)」とは、クラスのインスタンスを生成せずに**1つだけ存在する実体(シングルトン)**を定義するための構文です。objectキーワードを使って定義し、主に以下の用途で使用されます。


1. オブジェクトの基本構文

scala
object MyObject { def greet(): Unit = { println("Hello, Scala!") } }

このようにobjectで定義されたMyObjectは、クラスとは異なりnewせずに直接使用できます。

scala
MyObject.greet() // => Hello, Scala!

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

Scalaのobjectシングルトンパターンを言語レベルでサポートしています。Javaでシングルトンを実装するには工夫が必要ですが、Scalaではobjectを使うだけで自然にシングルトンになります。


3. クラスとの連携:コンパニオンオブジェクト

Scalaでは、同じ名前のクラスとオブジェクトを同じファイル内で定義することができます。これをコンパニオンクラスコンパニオンオブジェクトと呼びます。オブジェクト内に定義されたメンバには、クラスの中からアクセスできます(逆も同様)。

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

このようにすることで、以下のように簡潔にインスタンスを生成できます。

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

4. アプリケーションエントリポイントとしての使用

Scalaのアプリケーションは、オブジェクトにmainメソッドを定義することでエントリポイントを指定できます。

scala
object MainApp { def main(args: Array[String]): Unit = { println("Scalaアプリケーションの開始") } }

このように、Javaのpublic static void mainに相当します。


5. オブジェクトの特徴まとめ

特徴 説明
インスタンス化不要 newせずに直接使用できる
シングルトン プログラム中にただ一つしか存在しない
staticの代替 Javaのstaticメンバーのように扱える
コンパニオンとの連携 同名のクラスと連携し、ファクトリーメソッドなどを提供
アプリケーションエントリ mainメソッドを定義してアプリの起点にできる

Scalaのobjectは、Javaにおけるstaticの代替手段だけでなく、より安全で柔軟なオブジェクト指向設計を可能にする重要な構文です。

生成日:2025/05/04