0Pricing
Kotlin Academy · レッスン

object宣言:Kotlinのシングルトン

objectでシングルトンを作成し、そのライフサイクルを理解します。

「object宣言:Kotlinのシングルトン」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

シングルトンとしての object

object宣言を使うと、スレッドセーフで遅延初期化される単一のインスタンス、つまりシングルトンを1行のコードで作成できます。

シングルトンの宣言

object Name { ... }を使うと、状態とメソッドを持つシングルトンを宣言できます。

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

シングルトンの状態

シングルトンは可変状態を保持でき、その状態にはどこからでもアクセスできるため、グローバルに共有されます。

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

遅延初期化

単一のインスタンスは、アクセスされた最初の時点で作成され、それより早く作成されることはありません。JVM により、この処理がスレッドセーフであることが保証されています。

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

インターフェースの実装

シングルトンはインターフェースを実装できるため、コールバックやストラテジーに役立ちます。

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

クラスの継承

オブジェクトは open クラスから継承することもできます。

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

実践:構成

シングルトンは、起動後に変更されないアプリ全体の構成に最適です。

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

実践:ユーティリティ関数

関連するステートレスなヘルパーをobjectにまとめると、名前空間付きの静的メソッドのように利用できます。

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

等価性と同一性

インスタンスは1つしかないため、同じオブジェクト参照に対して===は常に true を返します。

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

object と class の比較

通常のclassはインスタンス化が必要です。一方、object自体がインスタンスであるため、コンストラクターを呼び出す必要はありません。

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

スレッドセーフ性

シングルトンのインスタンス作成は、JVM のクラスローディングによる保証によってスレッドセーフです。ただし、内部に追加する可変状態の管理は開発者の責任です。

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

クイックチェック

Kotlin のobject宣言では、いくつのインスタンスが存在しますか?

まとめ

object Name { ... }は、状態、メソッド、インターフェース、継承をサポートする、スレッドセーフな遅延シングルトンを宣言します。構成、ユーティリティのグループ、ステートレスなサービスには object を使用します。

よくある質問

「object宣言:Kotlinのシングルトン」レッスンは無料ですか?

はい。「object宣言:Kotlinのシングルトン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「object宣言:Kotlinのシングルトン」で何を学びますか?

objectでシングルトンを作成し、そのライフサイクルを理解します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「object宣言:Kotlinのシングルトン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. object宣言:Kotlinのシングルトン
  2. companion object:Kotlinで静的メンバーのように使う
  3. 匿名オブジェクトとオブジェクト式
  4. companion objectによるファクトリーメソッド
← Kotlin Academyに戻る