Java + LiveDataを使ったRoomの技術調査用アプリ
documentやroomの内部実装を見ると、RoomDatabaseやdaoをシングルトンで扱うことを推奨している。
https://github.com/LeoAndo/RoomJavaSample/blob/main/app/src/main/java/com/leoleo/roomjavasample/roomjavasample/data/DataModule.java
こちらの実装はroomの自動生成ファイル(java)やjetpack、kotlinの遅延初期化(lazy)の内部実装を参考にした。
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStoreDelegate.kt?hl=ja
![スクリーンショット 2023-07-13 23 48 13](https://private-user-images.githubusercontent.com/16476224/253318234-e8949d1c-f8fb-4463-96bd-2d27cae448ca.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5Njc5MjYsIm5iZiI6MTcyMTk2NzYyNiwicGF0aCI6Ii8xNjQ3NjIyNC8yNTMzMTgyMzQtZTg5NDlkMWMtZjhmYi00NDYzLTk2YmQtMmQyN2NhZTQ0OGNhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI2VDA0MjAyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZmYWFjZGViYzMwZTg2OTZhMDUwYWRjOTk0YTljY2JiMjgzNjUwMzYzNDBiYjdlMGQzOWI5ODFkN2Q5MDI3NWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.O4_kibfSvqBrnlGxmkqkGQOIfu0Lbb2O3Bha3weVEYk)
![スクリーンショット 2023-07-13 23 48 04](https://private-user-images.githubusercontent.com/16476224/253318243-be3ed6f4-cac0-4fec-a977-d526408a7f89.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5Njc5MjYsIm5iZiI6MTcyMTk2NzYyNiwicGF0aCI6Ii8xNjQ3NjIyNC8yNTMzMTgyNDMtYmUzZWQ2ZjQtY2FjMC00ZmVjLWE5NzctZDUyNjQwOGE3Zjg5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI2VDA0MjAyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyOTZmMGQzYTdiMDdmMWFiMzg2ZDVhZDYyOGM3MGU5MmJjMTJiZDYzYzU3YTQ2Y2E5ZTA2ODZkOWVmNDE3NzkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.WGzsGYTK2WMojvYlbbHq30cR7VwRS6beEQkiinnqfz0)
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/jvm/src/kotlin/util/LazyJVM.kt#L55:L87
https://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java
https://en.wikipedia.org/wiki/Singleton_pattern