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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- object宣言:Kotlinのシングルトン
- companion object:Kotlinで静的メンバーのように使う
- 匿名オブジェクトとオブジェクト式
- companion objectによるファクトリーメソッド