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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NTk1ODAsIm5iZiI6MTcyMTk1OTI4MCwicGF0aCI6Ii8xNjQ3NjIyNC8yNTMzMTgyMzQtZTg5NDlkMWMtZjhmYi00NDYzLTk2YmQtMmQyN2NhZTQ0OGNhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI2VDAyMDEyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEzMTc5ZTNhYzZkMDE4ZTc4YmMyZGFiNTJkM2Q1M2RiYmJiYWFkNjFlNTY0ZmEyMDBmMzFiYTI2YTU5YTg3YmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Satt4gFKqUcc-MD1vizmILmw4P-WjxA9khIagG-v22w)
![スクリーンショット 2023-07-13 23 48 04](https://private-user-images.githubusercontent.com/16476224/253318243-be3ed6f4-cac0-4fec-a977-d526408a7f89.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NTk1ODAsIm5iZiI6MTcyMTk1OTI4MCwicGF0aCI6Ii8xNjQ3NjIyNC8yNTMzMTgyNDMtYmUzZWQ2ZjQtY2FjMC00ZmVjLWE5NzctZDUyNjQwOGE3Zjg5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI2VDAyMDEyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE4MGIzMzk4YWI3OTVjNzU2ZGI2ZWNjMTliMTVmOWI1OWJmYmQ1OTdmYzc3NDgxMTAzMzc2NWZkNmVmOTg4OGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.dEkcTZpQwK4fKgfYtEji2Y7M7BLFpsl44LS0tckihTA)
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