{"id":1069,"date":"2021-07-16T21:39:40","date_gmt":"2021-07-16T12:39:40","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=1069"},"modified":"2025-09-12T17:27:34","modified_gmt":"2025-09-12T08:27:34","slug":"multithread-singleton-%ea%b5%ac%ed%98%84%ec%97%90%ec%84%9c%ec%9d%98-double-checked-locking-pattern","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2021\/07\/16\/1069\/","title":{"rendered":"Multithread Singleton \uad6c\ud604\uc5d0\uc11c\uc758 Double-checked locking pattern"},"content":{"rendered":"\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc Room\uc5d0\uc11c Database \ud074\ub798\uc2a4\uc758 Singleton \uad6c\ud604\uc5d0 \uc870\uae08 \uc758\uc544\ud574 \ubcf4\uc774\ub294 \ucf54\ub4dc\uac00 \uc788\uc5c8\ub2e4. Database class \ucf54\ub4dc\ub97c \ub2e4\uc2dc\ubcf4\uba74 \uc544\ub798\uc640 \uac19\uc740\ub370,<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Database(entities = &#91;Car::class, Ticket::class&#93;, version = 1)\nabstract class ParkingDatabase : RoomDatabase(){\n    abstract fun carDao(): CarDao\n    abstract fun ticketDao(): TicketDao\n\n    companion object {\n        \/\/ For Singleton instantiation\n        @Volatile private var instance: ParkingDatabase? = null\n\n        fun getInstance(context: Context): ParkingDatabase {\n            return instance ?: synchronized(this) {\n                instance ?: buildDatabase(context).also { instance = it }\n            }\n        }\n\n        private fun buildDatabase(context: Context): ParkingDatabase{\n            return Room.databaseBuilder(context.applicationContext, ParkingDatabase::class.java, \"Parking\").build()\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">@Database<\/span><span style=\"color: #ADBAC7\">(entities <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;Car::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">, Ticket::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">&#93;, version <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">abstract<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">ParkingDatabase<\/span><span style=\"color: #ADBAC7\"> : <\/span><span style=\"color: #F69D50\">RoomDatabase<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">abstract<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">carDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">CarDao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">abstract<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">ticketDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">TicketDao<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">companion<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">object<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ For Singleton instantiation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">@Volatile<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> instance: <\/span><span style=\"color: #F69D50\">ParkingDatabase<\/span><span style=\"color: #ADBAC7\">? <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">null<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(context: <\/span><span style=\"color: #F69D50\">Context<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">ParkingDatabase<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> instance ?: <\/span><span style=\"color: #DCBDFB\">synchronized<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">this<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">                instance ?: <\/span><span style=\"color: #DCBDFB\">buildDatabase<\/span><span style=\"color: #ADBAC7\">(context).<\/span><span style=\"color: #DCBDFB\">also<\/span><span style=\"color: #ADBAC7\"> { instance <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> it }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">buildDatabase<\/span><span style=\"color: #ADBAC7\">(context: <\/span><span style=\"color: #F69D50\">Context<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">ParkingDatabase<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> Room.<\/span><span style=\"color: #DCBDFB\">databaseBuilder<\/span><span style=\"color: #ADBAC7\">(context.applicationContext, ParkingDatabase::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">.java, <\/span><span style=\"color: #96D0FF\">&quot;Parking&quot;<\/span><span style=\"color: #ADBAC7\">).<\/span><span style=\"color: #DCBDFB\">build<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>singleton \uad6c\ud604\ubd80\ubd84\uc5d0\uc11c getInstance() \ud568\uc218\ub9cc \ub5bc\uc5b4\uc11c \ubcf4\uc790.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>...\nfun getInstance(context: Context): ParkingDatabase {\n    return instance ?: synchronized(this) {\n        instance ?: buildDatabase(context).also { instance = it }\n    }\n}\n...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(context: <\/span><span style=\"color: #F69D50\">Context<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">ParkingDatabase<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> instance ?: <\/span><span style=\"color: #DCBDFB\">synchronized<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">this<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        instance ?: <\/span><span style=\"color: #DCBDFB\">buildDatabase<\/span><span style=\"color: #ADBAC7\">(context).<\/span><span style=\"color: #DCBDFB\">also<\/span><span style=\"color: #ADBAC7\"> { instance <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> it }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p> \ucf54\ub4dc\ub97c \ubcf4\uba74, instance\uc758 null \uc5ec\ubd80\ub97c \ub450 \ubc88 \uccb4\ud06c\ud558\uace0 \uc788\ub2e4. \uc0dd\uac01\uc5c6\uc774 \ubcf4\uba74 \uc774\uc0c1\ud560 \uc218 \uc788\ub294\ub370, \uba40\ud2f0 \uc4f0\ub808\ub4dc \ub3d9\uae30\ud654\uc2dc \uaf2d \ud544\uc694\ud55c \ubd80\ubd84\uc774\uba70 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Double-checked_locking\">Double-checked locking \uc774\ub77c\uace0 \ubd80\ub974\ub294 \ub514\uc790\uc778 \ud328\ud134<\/a>\uc774\ub2e4. \ub9c1\ud06c\uc758  \uc704\ud0a4\ud398\uc774\uc9c0\ub97c \ub530\ub77c\uac00\uba74 \uad00\ub828 \uc124\uba85\uc774 \uc788\ub2e4. <\/p>\n\n\n\n<p> <strong><span class=\"has-inline-color has-vivid-red-color\">\uc774\ub807\uac8c \ub450\ubc88 \uccb4\ud06c\ud558\ub294 \uc774\uc720\ub97c \uc0b4\ud3b4\ubcf4\uc790. \uccab\ubc88\uc9f8 instance\uc758 null\uccb4\ud06c\ub294 synchronized\ub85c lock\uc744 \uac70\ub294 \ubd80\ud558\ub97c \uc904\uc774\uae30 \uc704\ud568\uc774\ub2e4. \uac12\uc774 \uc874\uc7ac\ud558\uba74 lock \uc624\ube0c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \ud544\uc694\uac00 \uc5c6\uc73c\ub2c8\uae4c. <br> \uccb4\ud06c\ub97c \ud588\ub294\ub370, synchronized \ube14\ub7ed\uc5d0 \uc9c4\uc785\ud574\uc11c \ud55c\ubc88 \ub354 instance\uc758 null\uc744 \uccb4\ud06c\ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. synchronized \ube14\ub7ed\uc5d0 \uc9c4\uc785\uc804\uc5d0 lock\uc774 \uac78\ub824\uc788\uc73c\uba74 \ud480\ub9b4\ub54c\uae4c\uc9c0 \ub300\uae30\ub97c \ud558\uac8c\ub418\uace0, \uadf8\uc0ac\uc774 lock\uc744 \uc7a1\uace0\uc788\ub294 \ub2e4\ub978 \uc4f0\ub808\ub4dc\uc5d0\uc11c instance\ub97c \uc0dd\uc131\ud588\uc744 \uac00\ub2a5\uc131\uc774 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.(\uc704 \ucf54\ub4dc\uc5d0\uc120 \uac00\ub2a5\uc131\uc774 \uc544\ub2c8\ub77c \uc0dd\uc131\ud588\uaca0\uc9c0.) \ub300\uae30\uac00 \ud480\ub9ac\uace0 synchronized \ube14\ub7ed\uc5d0 \uc9c4\uc785\ud588\uc744 \ub54c, \uc774\uc640\uac19\uc740 \uc0c1\ud669\uc5d0\uc11c \uc911\ubcf5\uc0dd\uc131\uc744 \ub9c9\uae30 \uc704\ud568\uc774\ub2e4. <\/span><\/strong><\/p>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-cyan-blue-color\">\uc544\uc8fc \uac04\ub2e8\ud558\uc9c0\ub9cc, \ubcf4\ud1b5 \uad6c\ud604\uc2dc \uccab\ubc88\uc9f8 \uccb4\ud06c\uc5c6\uc774 \ubc14\ub85c synchronized \ube14\ub7ed\ub9cc \ub3cc\ub9ac\ub294 \uacbd\uc6b0\ub3c4 \ub9ce\uace0, \uba40\ud2f0\uc4f0\ub808\ub4dc \uc0c1\ud669\uc744 \uc758\uc2dd\ud558\uc9c0 \uc54a\uc73c\uba74 \ub354\ube14\uccb4\ud06c\uac00 \uc774\uc0c1\ud558\uac8c \ubcf4\uc77c \uc218\ub3c4 \uc788\ub2e4. \ud558\uc9c0\ub9cc, \uc54c\uace0\ub098\uba74 \uc774\uac8c \ucd5c\uc801\uc758 \ucf54\ub4dc\ub77c\ub294 \uac83<\/span>.<\/strong> \uadf8\ub7ec\ub2c8\uae4c \ub514\uc790\uc778 \ud328\ud134\uc774\uaca0\uc9c0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc Room\uc5d0\uc11c Database \ud074\ub798\uc2a4\uc758 Singleton \uad6c\ud604\uc5d0 \uc870\uae08 \uc758\uc544\ud574 \ubcf4\uc774\ub294 \ucf54\ub4dc\uac00 \uc788\uc5c8\ub2e4. Database class \ucf54\ub4dc\ub97c \ub2e4\uc2dc\ubcf4\uba74 \uc544\ub798\uc640 \uac19\uc740\ub370, singleton \uad6c\ud604\ubd80\ubd84\uc5d0\uc11c getInstance() \ud568\uc218\ub9cc \ub5bc\uc5b4\uc11c \ubcf4\uc790. \ucf54\ub4dc\ub97c \ubcf4\uba74, instance\uc758 null \uc5ec\ubd80\ub97c \ub450 \ubc88 \uccb4\ud06c\ud558\uace0 \uc788\ub2e4. \uc0dd\uac01\uc5c6\uc774 \ubcf4\uba74 \uc774\uc0c1\ud560 \uc218 \uc788\ub294\ub370, \uba40\ud2f0 \uc4f0\ub808\ub4dc \ub3d9\uae30\ud654\uc2dc \uaf2d \ud544\uc694\ud55c \ubd80\ubd84\uc774\uba70 Double-checked locking \uc774\ub77c\uace0 \ubd80\ub974\ub294 \ub514\uc790\uc778 \ud328\ud134\uc774\ub2e4. \ub9c1\ud06c\uc758 <a href=\"http:\/\/batmask.net\/index.php\/2021\/07\/16\/1069\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,34],"tags":[104,232,38,108,233,234,134,41],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-etc","category-kotlin","tag-design-pattern","tag-double-checked-locking","tag-kotlin","tag-singleton","tag-synchronized","tag-234","tag-singleton-kr","tag-kotlin-kr"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":7,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":3482,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/1069\/revisions\/3482"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}