{"id":938,"date":"2021-05-15T11:57:13","date_gmt":"2021-05-15T02:57:13","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=938"},"modified":"2025-09-12T18:26:16","modified_gmt":"2025-09-12T09:26:16","slug":"db-relationship-with-room","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2021\/05\/15\/938\/","title":{"rendered":"DB relationship with Room"},"content":{"rendered":"\n<p>\uc55e\uc11c <a href=\"http:\/\/batmask.dothome.co.kr\/index.php\/2021\/05\/09\/898\/\">DB relationship \uc5d0 \ub300\ud574 SQLite<\/a>\ub85c \uc54c\uc544\ubcf4\uc558\ub2e4. one to one, one to many, many to many relationship\uc5d0 \ub300\ud574\uc120 \uc774\uc804\uae00\uc744 \ucc38\uace0\ud558\uace0, \ub3d9\uc77c\ud55c \ub0b4\uc6a9\uc744 Room\uc5d0\uc11c \uad6c\ud604\ud574\ubcf4\uc790. <br><strong><span class=\"has-inline-color has-vivid-red-color\"> Room \uc801\uc6a9\uc2dc \uaf2d \uc9c1\uc811 \ud14c\uc2a4\ud2b8 \ud558\uae38 \ubc14\ub780\ub2e4. \ucc98\uc74c \uc0ac\uc6a9\ud574\ubcf4\uba74\uc11c SQL\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\ubcf4\ub2e4 \uc624\ud788\ub824 \ud63c\ub780\uc2a4\ub7ec\uc6b4 \uc810\ub3c4 \ub9ce\uc558\ub2e4. \uc608\ub97c\ub4e4\uc5b4, api level 24 \uc778 android 7.0 \uc5d0\ubbac\ub808\uc774\ud130\uc5d0\uc120 \ud14c\uc774\ube14 \uc0dd\uc131\uc774 \uc548\ub41c\uac74\uc9c0 \uadf8\ub7f0 \ud14c\uc774\ube14\uc774 \uc5c6\ub2e4\uba70 \uc624\ub958\ub97c \ubc49\uc5b4\ub0b4\uace0 \uc81c\ub300\ub85c \ub3d9\uc791\ud558\uc9c0 \uc54a\uc558\ub2e4. <\/span><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Set up<\/h3>\n\n\n\n<p>\uc6b0\uc120, \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c Room\uc744 \uc0ac\uc6a9\ud558\uae30\uc704\ud574 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00\ud574\uc57c\ud55c\ub2e4.<\/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>plugins {\n    id 'com.android.application'\n    id 'kotlin-android'\n    id 'kotlin-kapt'  \/\/ &lt;-- kapt \ud50c\ub7ec\uadf8\uc778 \ucd94\uac00\n}\n...\ndependencies {\n\u00a0 def room_version = \"2.3.0\"\n\n\u00a0 implementation \"androidx.room:room-runtime:$room_version\"\n\u00a0 kapt \"androidx.room:room-compiler:$room_version\"\n\n\u00a0 \/\/ optional - Kotlin Extensions and Coroutines support for Room\n\u00a0 implementation \"androidx.room:room-ktx:$room_version\"\n\n\u00a0 \/\/ optional - Test helpers\n\u00a0 testImplementation \"androidx.room:room-testing:$room_version\"\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: #ADBAC7\">plugins {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;com.android.application&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;kotlin-android&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    id <\/span><span style=\"color: #96D0FF\">&#39;kotlin-kapt&#39;<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">\/\/<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #768390\">-- kapt \ud50c\ub7ec\uadf8\uc778 \ucd94\uac00<\/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\">dependencies {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 def room_version <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;2.3.0&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 implementation <\/span><span style=\"color: #96D0FF\">&quot;androidx.room:room-runtime:$room_version&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 kapt <\/span><span style=\"color: #96D0FF\">&quot;androidx.room:room-compiler:$room_version&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 <\/span><span style=\"color: #F47067\">\/\/<\/span><span style=\"color: #ADBAC7\"> optional <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\"> Kotlin Extensions <\/span><span style=\"color: #F47067\">and<\/span><span style=\"color: #ADBAC7\"> Coroutines support <\/span><span style=\"color: #F47067\">for<\/span><span style=\"color: #ADBAC7\"> Room<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 implementation <\/span><span style=\"color: #96D0FF\">&quot;androidx.room:room-ktx:$room_version&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 <\/span><span style=\"color: #F47067\">\/\/<\/span><span style=\"color: #ADBAC7\"> optional <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\"> Test helpers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u00a0 testImplementation <\/span><span style=\"color: #96D0FF\">&quot;androidx.room:room-testing:$room_version&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uacf5\uc2dd\ubb38\uc11c\uc5d0\ub294 \uba85\uc2dc\uac00 \uc548\ub418\uc5b4 \uc788\ub294\ub370, Room\uc740 Kotlin annotation\uc5d0 \uc758\ud574 \ud574\uc11d\uc774 \ub418\uae30 \ub54c\ubb38\uc5d0 kapt \ud50c\ub7ec\uadf8\uc778\uc774 \ud544\uc694\ud558\ub2e4. \uc0ac\uc6a9\uc911\uc774\ub77c\uba74 \uc0c1\uad00\uc5c6\uc9c0\ub9cc, \uc5c6\ub2e4\uba74 \ucd94\uac00\ud574\uc57c\ud55c\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uae30\ubcf8\uc801\uc778 Room \uc0ac\uc6a9\ubc95<\/h3>\n\n\n\n<p>Room\uc740 \ub2e4\uc74c\uc758 3\uac00\uc9c0\ub97c \uad6c\ud604\ud574\uc57c \ud55c\ub2e4. <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Entity class<\/strong> : @Entity \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc778 data class \uc774\ub2e4. \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8\uc5d0 \ud574\ub2f9\ud55c\ub2e4. <\/li>\n\n\n\n<li><strong>DAO <\/strong>: Room\uc740 DAO \ubaa8\ub378\uc744 \ub530\ub978\ub2e4. \ucffc\ub9ac\ub97c \ucd94\uc0c1\ud654\ud574 \uc0ac\uc6a9\uc790\uac00 \ucffc\ub9ac\ub300\uc2e0 \uc0ac\uc6a9\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4 \uc774\ub2e4. @Dao \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc5ec\uc900\ub2e4. <\/li>\n\n\n\n<li><strong>Database class<\/strong> : \uc571\uc5d0\uc11c Database\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud55c \uae30\ubcf8 \uac1d\uccb4. DB\uac00 \uc5c6\uc73c\uba74 \uc0dd\uc131\ud558\uace0, \uc0ac\uc6a9\uc790\uc5d0\uac8c DAO\ub97c \ub9ac\ud134\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc900\ub2e4. @Database \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc5ec\uc900\ub2e4. <\/li>\n<\/ol>\n\n\n\n<p>\uc774\uc804\uc5d0 \ub2e4\ub918\ub358 one to one \uc758 \uc608\uc81c\ub97c Room\uc5d0\uc11c \uad6c\ud604\ud574\ubcf4\uc790. \uc774\uc804 \uc608\uc81c\ub294 \uc8fc\ucc28\uc7a5\uc5d0\uc11c \uc8fc\ucc28\uad8c\uc744 \ubc1b\ub294 \ucc28\uc5d0 \ub300\ud55c \uac83\uc774\uc5c8\ub2e4. \uc8fc\ucc28\uad8c\uc740 \ud558\ub098\uc758 \ucc28\uc5d0 \ub300\ud574\uc11c\ub9cc \ubc1c\uae09\ub418\uace0, \ucc28\ub3c4 \ud558\ub098\uc758 \uc8fc\ucc28\uad8c\ub9cc \uac16\uac8c\ub41c\ub2e4. \ud14c\uc774\ube14 \ud615\ud0dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc558\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"603\" height=\"233\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/05\/car_ticket.png\" alt=\"\" class=\"wp-image-905\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/car_ticket.png 603w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/car_ticket-300x116.png 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>1. Entity class<\/strong><\/p>\n\n\n\n<p>SQLite\uc5d0\uc11c \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud55c \uac83\uacfc \ube44\uc2b7\ud558\uac8c Entry class\ub97c \ub9cc\ub4e4\uc5b4\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(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>@Entity (tableName=\"car\")\ndata class Car(\n    @PrimaryKey val car_id: Long,\n    @ColumnInfo(name=\"car_number\") val car_number: String,\n    @ColumnInfo(name=\"product_name\") val product_name: String\n    )\n\n@Entity (tableName=\"ticket\",\n    foreignKeys = [\n        ForeignKey(\n            entity = Car::class,\n            parentColumns = &#91;\"car_id\"&#93;,\n            childColumns = &#91;\"car_id\"&#93;\n        )\n    ])\ndata class Ticket(\n    @PrimaryKey val ticket_id: Long,\n    @ColumnInfo(name=\"name\") val name: String,\n    @ColumnInfo(name=\"enter_time\") val enter_time: String,\n    @ColumnInfo(name=\"exit_time\") val exit_time: String?,\n    @ColumnInfo(name=\"car_id\") val car_id: Long\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\">@Entity<\/span><span style=\"color: #ADBAC7\"> (tableName<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;car&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;car_number&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car_number: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;product_name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> product_name: <\/span><span style=\"color: #F69D50\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Entity<\/span><span style=\"color: #ADBAC7\"> (tableName<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;ticket&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    foreignKeys <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">ForeignKey<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            entity <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> Car::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            parentColumns <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;<\/span><span style=\"color: #96D0FF\">&quot;car_id&quot;<\/span><span style=\"color: #ADBAC7\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            childColumns <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;<\/span><span style=\"color: #96D0FF\">&quot;car_id&quot;<\/span><span style=\"color: #ADBAC7\">&#93;<\/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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> ticket_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> name: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;enter_time&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> enter_time: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;exit_time&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> exit_time: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;car_id&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car_id: <\/span><span style=\"color: #F69D50\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc5b4\ub178\ud14c\uc774\uc158\ub4e4\uc744 \uc8fc\uc758\uae4a\uac8c \ubcf4\uc790. @Entry\uc5d0 \uc778\uc790\ub85c \ud14c\uc774\ube14 \uc774\ub984\uc774 \ub4e4\uc5b4\uac04\ub2e4. \uceec\ub7fc\ub4e4\uc5d0\ub294 @PrimaryKey \ub85c Primary key \ud45c\uc2dc\ub97c \ud558\uace0\uc788\uace0, \uac01 \uceec\ub7fc\uc5d0 \ud574\ub2f9\ud558\ub294 \ubcc0\uc218\ub4e4\uc5d0 @ColumnInfo\ub85c \uceec\ub7fc\uc774\ub984\uc744 \uc9c0\uc815\ud574\uc8fc\uace0 \uc788\ub2e4. \uc774 \ubd80\ubd84\uc774 \uc5c6\uc73c\uba74, \uc790\ub3d9\uc73c\ub85c \ubcc0\uc218\uba85 \uceec\ub7fc\uc774\ub984\uc744 \uc0dd\uc131\ud558\ub294 \uac83\uc73c\ub85c \uc54c\uace0\uc788\uc73c\ub098, \uba85\ud655\ud558\uac8c \uc0ac\uc6a9\ud558\uae30\uc704\ud574 \uc368\uc92c\ub2e4. <\/p>\n\n\n\n<p>Ticket \ud074\ub798\uc2a4\uc5d0 \ubd99\uc740 @Entity\uc5d0 ForeignKey\ub97c \uc9c0\uc815\ud574\ub193\uc740\uac8c \ubcf4\uc77c\uac83\uc774\ub2e4. Foreign key\uc640 \uc55e\uc73c\ub85c \ub2e4\ub8f0 @Relation\uc758 \ucc28\uc774\uc810\uc740, Foreign Key\ub294 \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8\uc0c1\uc758 \uc81c\uc57d\uc0ac\ud56d\uc774\uace0, @Relation\uc740 \ucffc\ub9ac\uc640 \uc5f0\uad00\ub418\uc5b4 JOIN\uc758 \uc5ed\ud560\uc744 \ud55c\ub2e4. \uc774\uc5d0\ub300\ud574\uc120  <a href=\"https:\/\/stackoverflow.com\/questions\/58518229\/what-is-the-difference-between-foreignkey-and-relation-annotations-in-room-dat\">stack overflow\uc758 \uc124\uba85<\/a>\uc744 \ucc38\uace0\ud558\uc790. <\/p>\n\n\n\n<p><strong>2. Dao \uc815\uc758<\/strong> <\/p>\n\n\n\n<p>Dao(Data Access Object)\ub294 SQL\uc758 \ucffc\ub9ac\ubb38\uc744 \ucd94\uc0c1\ud654 \ud574\uc900\ub2e4. \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 SQL\ubb38\uc744 \uccb4\ud06c\ud55c\ub2e4\ub294 \uc5c4\uccad\ud070 \uc7a5\uc810\uacfc \uc0ac\uc6a9\uc758 \uac04\ud3b8\ud568\ub4f1 \uc7a5\uc810\uc774 \ub9ce\ub2e4. \ub610\ud55c \uae30\ubcf8\uc801\uc778 insert, delete, update\uc5d0 \ub300\ud574\uc120 SQL\ubb38\uc744 \ud544\uc694\ub85c \ud558\uc9c0 \uc54a\uace0 \uc9c1\uc811 \ucc98\ub9ac\ud574\uc900\ub2e4. <\/p>\n\n\n\n<p>Car, Ticket \ud14c\uc774\ube14 \uac01\uac01\uc5d0 \ub300\ud55c insert, update, delete \ub97c \uba3c\uc800 \ub9cc\ub4e4\uc5b4\ubcf4\uc790. \uc6b0\uc120 \uc54c\uc544\uc57c\ud560 \uc810\uc740 Dao \uad6c\ud604\uc740 Room\uc5d0\uc11c \ucc98\ub9ac\ud574\uc8fc\ubbc0\ub85c interface\ub9cc \ub9cc\ub4e4\uc5b4\uc900\ub2e4. \ub610\ud55c, \uae30\ubcf8\uc801\uc778 insert, update, delete\ub294 Room\uc5d0\uc11c \uc54c\uc544\uc11c \ucc98\ub9ac\ud574\uc8fc\ubbc0\ub85c SQL Query\ubb38\uc5c6\uc774 \uc791\uc131\uc774 \uac00\ub2a5\ud558\ub2e4. \uc774 \uc678\uc5d0 \uac12\uc744 \uac00\uc838\uc624\uac70\ub098, \ubcf5\uc7a1\ud55c \ucffc\ub9ac\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub294 \uc9c1\uc811 \ub9cc\ub4e4\uc5b4\uc57c \ud55c\ub2e4. Car, Ticket\uc5d0 \ub300\ud574 \ub9cc\ub4e4\uc5b4\ubcf8 \uc608\uc81c\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>@Dao\ninterface CarDao {\n    @Insert\n    fun insertCars(vararg cars: Car): List&lt;Long>\n\n    @Update\n    fun updateCars(vararg cars: Car)\n\n    @Delete\n    fun deleteCars(vararg cars: Car)\n\n    @Query(\"DELETE FROM car WHERE car_id = :carId\")\n    fun deleteById(carId: Long)\n    \n    @Query(\"SELECT * FROM car\")\n    fun getCars(): List&lt;Car>\n}\n\n@Dao\ninterface TicketDao {\n    @Insert\n    fun insertTickets(vararg tickets: Ticket): List&lt;Long>\n\n    @Update\n    fun updateTickets(vararg tickets: Ticket)\n\n    @Delete\n    fun deleteTickets(vararg tickets: Ticket)\n    \n    @Query(\"SELECT * FROM ticket\")\n    fun getTickets(): List&lt;Ticket>\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\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/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\">insertCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/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\">updateCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/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\">deleteCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;DELETE FROM car WHERE car_id = :carId&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/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\">deleteById<\/span><span style=\"color: #ADBAC7\">(carId: <\/span><span style=\"color: #F69D50\">Long<\/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 style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM car&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/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\">getCars<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TicketDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/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\">insertTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/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\">updateTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/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\">deleteTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/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 style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM ticket&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/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\">getTickets<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>@Insert, Update, @Delete \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \ub530\ub85c SQL \ubb38\uc774 \ub4e4\uc5b4\uac00\uc788\uc9c0 \uc54a\ub294\uac78 \ubcfc \uc218 \uc788\ub2e4. \ub610\ud55c, insert \uac19\uc740 \uacbd\uc6b0, \ub9ac\ud134\uac12\uc744 \ud45c\uc2dc\ud574\uc8fc\uba74 \ucd94\uac00\ub41c row\uc758 id\uac12\uc744 \ub3cc\ub824\uc900\ub2e4. @Delete \uc5b4\ub178\ud14c\uc774\uc158\uc740 \ud544\uc694\ud55c\uac74 id\uaca0\uc9c0\ub9cc, \uae30\ubcf8\uc801\uc73c\ub85c \uac1d\uccb4\ub97c \uc778\uc790\ub85c \ubc1b\ub294\ub2e4. id\ub85c \uc0ad\uc81c\ud558\uae30 \uc704\ud574 deleteById()\uc5d0\uc11c \uc9c1\uc811 SQL \ucffc\ub9ac\ubb38\uc744 \ub9cc\ub4e4\uc5b4 \uc92c\ub2e4. \uc774\ucc98\ub7fc \uc0ac\uc6a9\uc790 \ucffc\ub9ac\ubb38\uc740 \uc804\ubd80 @Query \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \uac01 \ud14c\uc774\ube14\uc758 \ub370\uc774\ud130\ub97c \uc804\ubd80 \ubcf4\uae30\uc704\ud55c getCars(), getTickets()\ub294 @Query \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ucffc\ub9ac\ub97c \ub0a0\ub824\uc8fc\uace0 \ub9ac\ud134\uac12\uc744 List&lt;Car&gt;, List&lt;Ticket&gt;\uc73c\ub85c \ubc1b\uc544\uc624\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p><strong>3. Database \uc815\uc758<\/strong><\/p>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \ub9cc\ub4e0 DB\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 Database \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud55c\ub2e4. DB \uc2a4\ud0a4\ub9c8\uc5d0 \ud574\ub2f9\ud558\ub294 Entity\ub4e4\uc744 \uc778\uc790\ub85c \ub118\uaca8\uc8fc\uace0, \uc571\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc55e\uc11c \ub9cc\ub4e0 Dao\ub4e4\uc744 \ub118\uaca8\uc918\uc57c\ud55c\ub2e4. @Database \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uace0 RoomDatabase\ub97c \uc0c1\uc18d\ud574\uc11c abstract class\ub85c \ub9cc\ub4e4\uc5b4\uc57c \ud55c\ub2e4. \uc9c0\uae08\uae4c\uc9c0 \ub9cc\ub4e0 Car, Ticket Entity\ub4e4\uacfc Dao\ub4e4\uc744 \uc774\uc6a9\ud574 \ub9cc\ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774\ub41c\ub2e4.<\/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>@Database \uc5b4\ub178\ud14c\uc774\uc158\uc5d0 entities\ub85c \uac01 Entity \ud074\ub798\uc2a4\ub4e4\uc744 \ub118\uaca8\uc8fc\uace0, RoomDatabase\ub97c \uc0c1\uc18d\ubc1b\uc544 \ucd94\uc0c1 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e0\ub2e4. \ud074\ub798\uc2a4 \ubab8\uccb4\uc5d0\uc120 Dao \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub3cc\ub824\uc8fc\ub294 \uba54\uc18c\ub4dc\ub4e4\uc774 \ub4e4\uc5b4\uac14\ub2e4. database \ud074\ub798\uc2a4\uac00 \ucd5c\uc18c\ud55c\uc73c\ub85c \ud544\uc694\ud55c\uac74 \uc5ec\uae30\uae4c\uc9c0\ub2e4. <br> companion object \ubd80\ubd84\uc740 DB\ub97c \uc571\uc5d0\uc11c singleton\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30\uc704\ud55c \ucf54\ub4dc\uc774\ub2e4. buildDatabase()\ub97c \ubcf4\uba74, Room\uc758 databaseBuilder\ub85c Database \uc778\uc2a4\ud134\uc2a4\ub97c \uc5b4\ub5bb\uac8c \uc0dd\uc131\ud558\ub294\uc9c0 \uc54c \uc218 \uc788\ub2e4. <\/p>\n\n\n\n<p><strong> 4. \uc815\uc758\ud55c database\uc640 Dao\uc758 \uc0ac\uc6a9<\/strong><\/p>\n\n\n\n<p>\uc774\uc81c \uc571\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub97c \ubcf4\uc790. \uc2f1\uae00\ud1a4 \uad6c\ud604\uc744 \ub9cc\ub4e4\uc5c8\uc73c\ubbc0\ub85c \uc571\uc5d0\uc11c \uc0ac\uc6a9\uc2dc, getInstance()\ub85c Database\ub97c \ubc1b\uc544\uc640 \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. \ub2e8, \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc120 \ub124\ud2b8\uc6cc\ud06c IO\ub098 Database IO\uac00 UI\ub97c \ube14\ub7ed\uc2dc\ud0ac\uc218 \uc788\uc5b4 \uba54\uc778\uc4f0\ub808\ub4dc\uc5d0\uc11c\uc758 \uc0ac\uc6a9\uc744 \uae08\uc9c0\uc2dc\ud0a4\uace0 \uc788\ub2e4. \uc4f0\ub808\ub4dc\ub97c \ub9cc\ub4e4\uc5b4 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc73c\ub098, \uc880 \ub354 \uac04\ud3b8\ud574\uc9c4 coroutine\uc744 \uc0ac\uc6a9\ud558\uc790. Room\uc5d0\uc11c\ub3c4 coroutine\uc744 \uc9c0\uc6d0\ud55c\ub2e4. Room\uc5d0\uc11c coroutine\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud558\ub2e4. \uc0ac\uc6a9\ud558\ub294 Dao \uc778\ud130\ud398\uc774\uc2a4\uc5d0 suspend\ub97c \ubd99\uc5ec\uc8fc\uba74 \ub41c\ub2e4. \uc55e\uc758 Dao\ub97c \ub2e4\uc2dc \uc368\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>@Dao\ninterface CarDao {\n    @Insert\n    suspend fun insertCars(vararg cars: Car)\n\n    @Update\n    suspend fun updateCars(vararg cars: Car)\n\n    @Delete\n    suspend fun deleteCars(vararg cars: Car)\n\n    @Query(\"DELETE FROM car WHERE car_id = :carId\")\n    suspend fun deleteById(carId: Long)\n\n    @Query(\"SELECT * FROM car\")\n    suspend fun getCars(): List&lt;Car>\n}\n\n@Dao\ninterface TicketDao {\n    @Insert\n    suspend fun insertTickets(vararg tickets: Ticket): List&lt;Long>\n\n    @Update\n    suspend fun updateTickets(vararg tickets: Ticket)\n\n    @Delete\n    suspend fun deleteTickets(vararg tickets: Ticket)\n\n    @Query(\"SELECT * FROM ticket\")\n    suspend fun getTickets(): List&lt;Ticket>\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\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insertCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">updateCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">deleteCars<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;DELETE FROM car WHERE car_id = :carId&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">deleteById<\/span><span style=\"color: #ADBAC7\">(carId: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM car&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getCars<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TicketDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insertTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">updateTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">deleteTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM ticket&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getTickets<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ucf54\ub8e8\ud2f4\uc744 \uc0ac\uc6a9\ud560 \ub550, Main Thread safe\ud558\uac8c \uc791\uc131\ud558\ub294\uac8c \uc6d0\uce59\uc774\ub2e4. \ucf54\ub8e8\ud2f4\uc774\ub780\uac8c \uba54\uc778\uc4f0\ub808\ub4dc\uc5d0\uc11c\ub3c4 \ub3d9\uc791\ud558\uae30 \ub54c\ubb38\uc5d0, suspend \ud568\uc218\ub97c \uc791\uc131\ud560 \ub54c \uc2dc\uac04\uc774 \uc624\ub798\uac78\ub9b0\ub2e4\uba74 \ub2e4\ub978 withContext()\ub4f1\uc744 \uc0ac\uc6a9\ud574\uc11c context\uc5d0\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ud55c\ub2e4\ub294 \ub73b\uc774\ub2e4. \ub124\ud2b8\uc6cd\uc774\ub098 DB\uc791\uc5c5\uc740 \ubcf4\ud1b5 Dispatcher.IO \ucee8\ud150\uc2a4\ud2b8\uc5d0\uc11c \uc2e4\ud589\ud558\ub294\ub370, Room\uc5d0\uc11c suspend\uac00 \ubd99\uc73c\uba74 \uc790\uccb4\uc801\uc73c\ub85c \ubcc4\ub3c4\uc758 context\ub97c \ub9cc\ub4e4\uc5b4 \uc2e4\ud589\ud55c\ub2e4. \ub530\ub77c\uc11c, Room database\ub97c \uc0ac\uc6a9\ud560 \ub54c \uba54\uc778\uc4f0\ub808\ub4dc\uc5d0\uc11c \uc2dc\uc791\ud574\ub3c4 \ubb38\uc81c\uac00 \uc548\ub41c\ub2e4.<br>Coroutine\uc5d0 \ub300\ud574\uc120 \uc544\uc9c1 \ub530\ub85c \uc815\ub9ac\ub97c \uc548\ud574\uc11c \ubb34\uc2a8\ub9d0\uc778\uc9c0 \uc798 \ubaa8\ub974\uaca0\ub2e4\uba74, <a href=\"https:\/\/developer.android.com\/kotlin\/coroutines\">\uacf5\uc2dd \ubb38\uc11c<\/a>\ub97c \ubcf4\uace0 \ud559\uc2b5\uc774 \uc880 \ud544\uc694\ud558\ub2e4. <\/p>\n\n\n\n<p>fragment\uc758 viewmodel\uc5d0 \uc791\uc131\ud574\ubcf8 \uc0d8\ud50c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>fun roomTest(){\n    viewModelScope.launch {\n        parkingRoomSample()\n    }\n}\n...\nsuspend fun parkingRoomSample(){\n    val database = ParkingDatabase.getInstance(getApplication())\n    val carDao = database.carDao()\n\n    withContext(Dispatchers.IO){\n        database.clearAllTables()\n    }\n\n    carDao.insertCars(\n        Car(1, \"11\uac001234\", \"avante\"),\n        Car(2, \"22\ub1082345\", \"damas\"),\n        Car(3, \"33\ub2e43456\", \"bmw m2\")\n    )\n\n    val cars: List&lt;Car> = carDao.getCars()\n    for (car in cars){\n        Log.i(\"room test\", car.toString())\n    }\n\n    ticketDao.insertTickets(\n        Ticket(1, \"parking 1\", \"2021-01-03 09:30:00\", null, 2),\n        Ticket(2, \"parking 1\", \"2021-02-10 13:10:00\", null, 3),\n        Ticket(3, \"parking 1\", \"2021-02-10 13:10:00\", null, 1)\n    )\n\n    val tickets: List&lt;Ticket> = ticketDao.getTickets()\n    for(ticket in tickets){\n        Log.i(\"room test\", ticket.toString())\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\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">roomTest<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    viewModelScope.<\/span><span style=\"color: #DCBDFB\">launch<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">parkingRoomSample<\/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: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">parkingRoomSample<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> database <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> ParkingDatabase.<\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">getApplication<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> carDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">carDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">withContext<\/span><span style=\"color: #ADBAC7\">(Dispatchers.IO){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        database.<\/span><span style=\"color: #DCBDFB\">clearAllTables<\/span><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\">    carDao.<\/span><span style=\"color: #DCBDFB\">insertCars<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Car<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;11\uac001234&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;avante&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Car<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;22\ub1082345&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;damas&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Car<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;33\ub2e43456&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;bmw m2&quot;<\/span><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\">val<\/span><span style=\"color: #ADBAC7\"> cars: <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">&gt; <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> carDao.<\/span><span style=\"color: #DCBDFB\">getCars<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">for<\/span><span style=\"color: #ADBAC7\"> (car <\/span><span style=\"color: #F47067\">in<\/span><span style=\"color: #ADBAC7\"> cars){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Log.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;room test&quot;<\/span><span style=\"color: #ADBAC7\">, car.<\/span><span style=\"color: #DCBDFB\">toString<\/span><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\">    ticketDao.<\/span><span style=\"color: #DCBDFB\">insertTickets<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Ticket<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;parking 1&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;2021-01-03 09:30:00&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">null<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Ticket<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;parking 1&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;2021-02-10 13:10:00&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">null<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Ticket<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;parking 1&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;2021-02-10 13:10:00&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">null<\/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: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tickets: <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Ticket<\/span><span style=\"color: #ADBAC7\">&gt; <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> ticketDao.<\/span><span style=\"color: #DCBDFB\">getTickets<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">for<\/span><span style=\"color: #ADBAC7\">(ticket <\/span><span style=\"color: #F47067\">in<\/span><span style=\"color: #ADBAC7\"> tickets){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Log.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;room test&quot;<\/span><span style=\"color: #ADBAC7\">, ticket.<\/span><span style=\"color: #DCBDFB\">toString<\/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><\/code><\/pre><\/div>\n\n\n\n<p>roomTest()\uac00 \ud638\ucd9c\ub418\uba74, \ucf54\ub4dc\ub97c \uc2e4\ud589\ud55c\ub2e4. viewmodel\uc5d0\uc11c \uc2e4\ud589\ud558\uae30 \ub54c\ubb38\uc5d0 coroutine\uc744 viewModelScope\uc5d0\uc11c \uc2e4\ud589\ud558\uace0 \uc788\uc73c\uba70, launch()\uc5d0\uc11c \ub530\ub85c context\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uba54\uc778\uc4f0\ub808\ub4dc\ub85c \uc2dc\uc791\ud55c\ub2e4. <\/p>\n\n\n\n<p>parkingRoomSample()\uc744 \ubcf4\uba74, \uc2f1\uae00\ud1a4 database\ub97c \uc5bb\uc5b4\uc624\uace0 \uc774\ub85c\ubd80\ud130 Dao\ub4e4\uc744 \uac00\uc838\uc628\ub2e4. \uc774 Dao \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \ucffc\ub9ac\ub97c \ub0a0\ub9b0\ub2e4. \uc0d8\ud50c\ucf54\ub4dc\uc5d0\uc11c DB\uc5d0 \uc911\ubcf5 insert\uac00 \ub418\uc9c0 \uc54a\ub3c4\ub85d database.clearAllTables()\ub97c \ubd88\ub7ec\uc8fc\uace0 \uc788\ub2e4. \uc774 \ud568\uc218\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc81c\uacf5 \ud568\uc218\uc9c0\ub9cc, suspend\uac00 \uc544\ub2c8\ub77c\uc11c withContext(Dispatch.IO)\ub85c \ubcc4\ub3c4 \ucee8\ud14d\uc2a4\ud2b8\ub85c \uc2e4\ud589\ud558\uace0 \uc788\ub2e4. \uc55e\uc5d0\uc11c \ub9d0\ud588\ub4ef\uc774 \uba54\uc778\uc4f0\ub808\ub4dc\uc5d0\uc11c DB\uad00\ub828 \uc791\uc5c5\uc740 \uc5d0\ub7ec\ub97c \ubc1c\uc0dd\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.  \uc704 \ucf54\ub4dc\uc758 \uc2e4\ud589\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>I\/room\u00a0test: Car(car_id=1, car_number=11\uac001234, product_name=avante)\n  I\/room\u00a0test: Car(car_id=2, car_number=22\ub1082345, product_name=damas)\n  I\/room\u00a0test: Car(car_id=3, car_number=33\ub2e43456, product_name=bmw m2)\n  I\/room\u00a0test: Ticket(ticket_id=1, name=parking 1, enter_time=2021-01-03 09:30:00, exit_time=null, car_id=2)\n  I\/room\u00a0test: Ticket(ticket_id=2, name=parking 1, enter_time=2021-02-10 13:10:00, exit_time=null, car_id=3)\n  I\/room\u00a0test: Ticket(ticket_id=3, name=parking 1, enter_time=2021-02-10 13:10:00, exit_time=null, car_id=1)<\/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\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Car<\/span><span style=\"color: #ADBAC7\">(car_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> car_number<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">\uac001234,<\/span><span style=\"color: #ADBAC7\"> product_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">avante<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F69D50\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Car<\/span><span style=\"color: #ADBAC7\">(car_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> car_number<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">22<\/span><span style=\"color: #96D0FF\">\ub1082345,<\/span><span style=\"color: #ADBAC7\"> product_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">damas<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F69D50\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Car<\/span><span style=\"color: #ADBAC7\">(car_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> car_number<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">33<\/span><span style=\"color: #96D0FF\">\ub2e43456,<\/span><span style=\"color: #ADBAC7\"> product_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">bmw<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">m2<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F69D50\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Ticket<\/span><span style=\"color: #ADBAC7\">(ticket_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">parking<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">1,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">enter_time=<\/span><span style=\"color: #6CB6FF\">2021<\/span><span style=\"color: #96D0FF\">-01-03<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">09<\/span><span style=\"color: #96D0FF\">:30:00,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">exit_time=null,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">car_id=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F69D50\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Ticket<\/span><span style=\"color: #ADBAC7\">(ticket_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">parking<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">1,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">enter_time=<\/span><span style=\"color: #6CB6FF\">2021<\/span><span style=\"color: #96D0FF\">-02-10<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">13<\/span><span style=\"color: #96D0FF\">:10:00,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">exit_time=null,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">car_id=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F69D50\">I\/room\u00a0test:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Ticket<\/span><span style=\"color: #ADBAC7\">(ticket_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #96D0FF\">,<\/span><span style=\"color: #ADBAC7\"> name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">parking<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">1,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">enter_time=<\/span><span style=\"color: #6CB6FF\">2021<\/span><span style=\"color: #96D0FF\">-02-10<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">13<\/span><span style=\"color: #96D0FF\">:10:00,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">exit_time=null,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">car_id=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Room\uc5d0\uc11c Database\ub97c \uc5b4\ub5bb\uac8c \uc0dd\uc131\ud558\uace0 \uc0ac\uc6a9\ud558\ub294\uc9c0 \uac04\ub7b5\ud788 \ubcf4\uc558\ub2e4. \uc11c\ub860\uc774 \uc5c4\uccad \uae38\uc5b4\uc84c\ub294\ub370, \uc774\uc81c \ubcf8\ub860\uc778 one to one relationship\uc73c\ub85c \ub3cc\uc544\uac00\uc790.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">One to One<\/h3>\n\n\n\n<p>\uc55e\uc5d0\uc11c Car \uc640 Ticket\uc758 \uac01 \uac1c\ubcc4 \ud14c\uc774\ube14\uc5d0 \ub300\ud574 Room\uc73c\ub85c \uad6c\ud604\ud588\uc5c8\ub2e4. \uc774\uc81c SQLite\uc5d0\uc11c JOIN \ucffc\ub9ac\ub97c \ud588\ub4ef 1:1 \uad00\uacc4\ub97c \uc0ac\uc6a9\ud574\ubcf4\uc790. <\/p>\n\n\n\n<p>\uc5ec\uae30\uc5d0\uc11c \uc0c8\ub85c \ub4f1\uc7a5\ud558\ub294\uac74 @Relation \uc5b4\ub178\ud14c\uc774\uc158\uc778\ub370, \ub2e8\uacc4\uc801\uc73c\ub85c \uc811\uadfc\ud574\ubcf4\uc790. \uc6b0\uc120 \ucffc\ub9ac\uc5d0\uc11c \uac12\uc744 \ubc1b\uc544\uc62c data class\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud55c\ub2e4. Car \uc640 Ticket\uc744 \ub458 \ub2e4 \ub2f4\uc740 data class\ub97c \ub9cc\ub4e4\uc790. 1:1 \uad00\uacc4\uc774\uae30 \ub54c\ubb38\uc5d0 \ud558\ub098\uc758 Car\uc640 \ud558\ub098\uc758 Ticket\ub9cc \ud3ec\ud568\ud55c\ub2e4.<\/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>data class CarAndTicket(\n    val car: Car,\n    val ticket: Ticket\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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> ticket: <\/span><span style=\"color: #F69D50\">Ticket<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc74c&#8230; \ub450 \ud14c\uc774\ube14\uc758 \ub370\uc774\ud130\ub97c \ubaa8\ub450 \ub2f4\uc744 \uc218 \uc788\uc9c0\ub9cc, JOIN\uc744 \uc0dd\uac01\ud574\ubcf4\uba74 \uc6d0\ud558\ub294 \ud615\ud0dc\ub294 \uc544\ub2c8\ub2e4. JOIN\uc774 \uc0c8\ub85c\uc6b4 \ud14c\uc774\ube14\uc744 \ub9cc\ub4e4\ub4ef, Car\uc640 Ticket\uc758 \uba64\ubc84\ub4e4\ub85c \uad6c\uc131\ub41c \uc0c8\ub85c\uc6b4 data class\uac00 \ub418\uba74 \uc88b\uc744 \uac83 \uac19\ub2e4. Car\uc5d0 \ub300\ud574\uc11c\ub9cc \ud480\uc5b4\uc11c \uc368\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>data class CarAndTicket(\n    val car_id: Long,\n    val car_number: String,\n    val product_name: String,\n    val ticket: Ticket\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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car_number: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> product_name: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> ticket: <\/span><span style=\"color: #F69D50\">Ticket<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc774\ub807\uac8c \uc0ac\uc6a9\uc2dc \ucf54\ub4dc\uc758 \uc911\ubcf5\uc774\uae30 \ub54c\ubb38\uc5d0 Car\uac00 \ubcc0\uacbd\ub418\ub294 \uacbd\uc6b0, CarAndTicket\ub3c4 \ub9e4\ubc88 \uc218\uc815\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc774\ub2e4. \uac04\ub2e8\ud558\uac8c \uc774\ub97c \ud574\uacb0\ud574\uc8fc\ub294 \ubc29\ubc95\uc774 \uc788\ub294\ub370, \ubc14\ub85c @Embedded \uc5b4\ub178\ud14c\uc774\uc158\uc774\ub2e4. <\/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>data class CarAndTicket(\n    @Embedded val car: Car,\n    val ticket: Ticket\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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Embedded<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> ticket: <\/span><span style=\"color: #F69D50\">Ticket<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc704\uc640 \uac19\uc774 \uc0ac\uc6a9\ud558\uba74, \uc790\ub3d9\uc73c\ub85c Car \ud074\ub798\uc2a4\ub97c \ubd84\ud574\ud574\uc11c \uba64\ubc84\ub4e4\ub9cc CarAndTicket\uc73c\ub85c \ub123\uc5b4\uc900\ub2e4. \uadf8\ub7fc Ticket\ub3c4 @Embedded\ub97c \uc368\uc57c\ud558\ub294\uac8c \uc544\ub2cc\uac00? Ticket\uc740 \uc5ec\uae30\uc11c \ub2e4\ub8f0 \ud575\uc2ec\uc778 @Relation \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud574 \ucc98\ub9ac\ud560 \uac83\uc774\ub2e4. @Relation\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4.<\/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>data class CarAndTicket(\n    @Embedded val car: Car,\n    @Relation(\n        parentColumn = \"car_id\",\n        entityColumn = \"car_id\"\n    )\n    val ticket: Ticket\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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Embedded<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> car: <\/span><span style=\"color: #F69D50\">Car<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Relation<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        parentColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;car_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        entityColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;car_id&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> ticket: <\/span><span style=\"color: #F69D50\">Ticket<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p> @Relation \uc5b4\ub178\ud14c\uc774\uc158\uc774 ticket \ubcc0\uc218\ub97c \uafb8\ubbf8\uace0 \uc788\ub2e4. \uc5b4\ub178\ud14c\uc774\uc158 \uc548\uc5d0\ub294 parentColumn\uc774 \uc788\uace0 entityColumn\uc774 \uc788\ub294\ub370, \uc678\ub798\ud0a4\ub85c \ucc38\uc870\ud558\ub294 Entity\uac00 parent\uc774\uace0 \ucc38\uc870 \uceec\ub7fc\uc774 parentColumn\uc774\ub2e4. \uc5ec\uae30\uc11c\ub294 Car \ud074\ub798\uc2a4\uc758 Primary key\uc778 car_id\ub97c \uba85\uc2dc\ud574\uc92c\ub2e4. @Relation\uc774 ticket\uc744 \uafb8\ubbf8\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0 entityColumn\uc740 Ticket\uc758 Column\uc784\uc744 \uc54c \uc218 \uc788\ub2e4. parent \uc640 entity \uad00\uacc4\uac00 \uace7 \ub450 \ud14c\uc774\ube14\uc758 \uad00\uacc4\ub97c \ud45c\ud604\ud558\uace0 \uc788\uc74c\uc744 \uc54c \uac83\uc774\ub2e4. \uc774\uc640\uac19\uc774 Room\uc5d0\uc11c relationship\uc740 @Relation \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ud45c\ud604\ud55c\ub2e4. <\/p>\n\n\n\n<p>\uc544 \uadf8\ub7f0\uac00 \uc2f6\ub2e4\uac00 \uc758\ubb38\uc774 \uc0dd\uae34\ub2e4. parentColumn\uc774 Car\uc758 \uceec\ub7fc\uc784\uc744 \uc5b4\ub5bb\uac8c \uc54c\uc544\uba39\ub294\uac70\uc9c0? parent \ud074\ub798\uc2a4\uac00 \uba85\uc2dc\ub41c \uacf3\uc774 \uc5c6\ub294\ub370? \ubc14\ub85c\uc55e\uc5d0 car \uba64\ubc84\ubcc0\uc218\ub97c \uc900\uac78\ub85c \uc778\uc2dd\ud558\ub098? @Embedded\ub418\uc11c \ud074\ub798\uc2a4 \uba64\ubc84\ub4e4\uc774 decompose\ub418\uc11c \ub4e4\uc5b4\uc62c\ud150\ub370?&#8221;  \uc774\ud574\ub97c \ud558\uae30\uc5d4 \uc815\ubcf4\uac00 \ubd80\uc871\ud574 \ud63c\ub780\uc5d0 \ube60\uc9c8\ud150\ub370, \ub2e4\uc74c\uc5d0 \ub098\uc624\ub294 @Dao \ucffc\ub9ac\uae4c\uc9c0 \uc0b4\ud3b4\ubd10\uc57c \uc644\uc131\uc774 \ub418\uae30 \ub54c\ubb38\uc774\ub2e4.<\/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>@Dao\ninterface CarTicketDao{\n    @Transaction\n    @Query(\"SELECT * FROM car\")\n    suspend fun getAllCarAndTickets(): List&lt;CarAndTicket>\n\n    @Transaction\n    @Query(\"SELECT * FROM car WHERE car.car_number = :car_number\")\n    suspend fun findCar(car_number: String): CarAndTicket\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\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">CarTicketDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM car&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getAllCarAndTickets<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM car WHERE car.car_number = :car_number&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">findCar<\/span><span style=\"color: #ADBAC7\">(car_number: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">CarAndTicket<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>getAllCarAndTickets()\ub97c \uc0b4\ud3b4\ubcf4\uc790. \uc6b0\uc120 @Transaction \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ubcf4\uc778\ub2e4. \uc774\ub294 database\uc5d0\uc11c \uc775\ud788 \uc54c\ub4ef\uc774 \uc5ec\ub7ec\uac1c\uc758 \ucffc\ub9ac\ub97c \uc6d0\uc790\ub2e8\uc704\ub85c \uc2e4\ud589\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub2e4. SQLite\uc5d0\uc11c JOIN\uc744 \uc0ac\uc6a9\ud588\uc9c0\ub9cc, \ub2e4\uc74c\uacfc \uac19\uc774 \ub450\uac1c\uc758 \ucffc\ub9ac\ub85c \ucc98\ub9ac\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/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>SELECT * FROM car\nSELECT * FROM ticket WHERE car_id IN ( car_id1, car_id2, ...)<\/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\">SELECT<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">FROM<\/span><span style=\"color: #ADBAC7\"> car<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">SELECT<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">FROM<\/span><span style=\"color: #ADBAC7\"> ticket <\/span><span style=\"color: #F47067\">WHERE<\/span><span style=\"color: #ADBAC7\"> car_id <\/span><span style=\"color: #F47067\">IN<\/span><span style=\"color: #ADBAC7\"> ( car_id1, car_id2, ...)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Room\uc5d0\uc11c\ub294 \uc774\uc640\uac19\uc774 \ub450\uac1c\uc758 \ucffc\ub9ac\ub85c \ucc98\ub9ac\ub97c \ud558\ub294\uc9c0 @Transaction\uc744 \ubc18\ub4dc\uc2dc \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4. \ub450\ubc88\uc9f8 \ud765\ubbf8\ub85c\uc6b4 \ubd80\ubd84\uc740 @Query \uc5b4\ub178\ud14c\uc774\uc158\uc5d0 \uc788\ub294 SQL \ucffc\ub9ac\ubb38\uc774 car\uc5d0 \ub300\ud574\uc11c\ub9cc \uad6c\uc131\ub418\uc5b4\uc788\ub2e4. \ucc28\uc774\uc810\uc774\ub77c\uba74 \ub9ac\ud134\uac12\uc774 CarAndTicket \ud615\ud0dc\ub780 \uc810\uc774\ub2e4. \uc989, \ub9ac\ud134\uac12\uc758 CarAndTicket \ud074\ub798\uc2a4\uc640 \ucffc\ub9ac\ubb38\uc5d0 \uba85\uc2dc\ud55c \ub300\uc0c1\uc778 car \ud14c\uc774\ube14\uc744 \uc870\ud569\ud558\uc5ec \ucc98\ub9ac\ub97c \ud574\uc900\ub2e4\ub294 \uc598\uae30\ub2e4. <\/p>\n\n\n\n<p>\uac1c\uc778\uc801\uc73c\ub85c \uc774\ubd80\ubd84\uc5d0\uc11c \uc0c1\ub2f9\ud788 \ud63c\ub780\uc2a4\ub7ec\uc6e0\uc5c8\ub294\ub370, JOIN\uc758 \uac1c\ub150\ubcf4\ub2e4\ub294 \ubc14\ub85c\uc704\uc5d0 \uc788\ub294 \ub450\ubc88\uc758 \ucffc\ub9ac\ub97c \ucd94\uc0c1\ud654 \ud55c\uac78\ub85c \uc774\ud574\ud558\uba74 \uc26c\uc6b8\uac70 \uac19\ub2e4. \uba54\uc778 \ucffc\ub9ac\ub294 car\uc5d0 \ub0a0\ub9ac\ub294 \uac70\uace0, \uc5ec\uae30\uc5d0 \uc5f0\uad00\ub41c \ub370\uc774\ud130\ub4e4\uc744 \ub2e4\ub978 \ud14c\uc774\ube14\uc5d0\uc11c \ucd94\uac00\ub85c \uac00\uc838\uc628\ub2e4\uace0 \uc0dd\uac01\ud558\uc790. <\/p>\n\n\n\n<p>findCar()\ub97c \uc0b4\ud3b4\ubcf4\uba74, \uc870\uac74\uc5d0 \ubd80\ud569\ud558\ub294 \ud2b9\uc815 \uc544\uc774\ud15c\ub9cc \uac00\uc838\uc624\ub294 \ubc29\ubc95\ub3c4 \uc54c \uc218 \uc788\ub2e4. \ud568\uc218\uc758 \uc778\uc790\uc778 car_number\ub97c @Query \uc5b4\ub178\ud14c\uc774\uc158 \uc548\uc5d0\uc11c :car_number \uc640 \uac19\uc774 \ucc38\uc870\ud558\uace0 \uc788\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">One to Many<\/h3>\n\n\n\n<p>Room\uc758 \uc0ac\uc6a9\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \uac83\uc740 One to One\uc5d0\uc11c \ub2e4 \ub2e4\ub918\uae30 \ub54c\ubb38\uc5d0 One to many \uc758 \uacbd\uc6b0\ub294 \uac04\ub2e8\ud558\ub2e4. \ucffc\ub9ac\ub97c \ubc1b\uc544\uc624\ub294 data class\ub9cc Many\uc5d0 \ub300\uc751\ud558\ub3c4\ub85d List\ub97c \uc0ac\uc6a9\ud574 \ubcc0\uacbd\ub41c\ub2e4. one to one\uc758 \uc608\uc81c\ub97c \ubcc0\uacbd\ud558\uba74 \uc815\ub9d0 \uac04\ub2e8\ud574 \uc9c0\uaca0\uc9c0\ub9cc, \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \ub2e4\ub918\ub358 \ud0dd\ubc30\ubb3c\ud488(package)\uc640 \ubc30\uc1a1\uc815\ubcf4(recipient)\ub85c \uad6c\uc131\ud574 \ubcf4\uaca0\ub2e4. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><span class=\"has-inline-color has-vivid-red-color\">recipient\ub97c receipient\ub85c \uc798\ubabb \uc801\uc5c8\ub2e4. \uc774\ubbf8\uc9c0\ub97c \ubbf8\ucc98 \uc218\uc815\ud558\uc9c0 \ubabb\ud568 \u315c <\/span><\/strong><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"833\" height=\"214\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/05\/package_receipient.png\" alt=\"\" class=\"wp-image-923\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/package_receipient.png 833w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/package_receipient-300x77.png 300w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/package_receipient-768x197.png 768w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><\/figure>\n<\/div>\n\n\n<p>\ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8\ub97c \ud45c\ud604\ud558\ub294 Entity \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>@Entity(tableName = \"recipient\")\ndata class Recipient(\n    @PrimaryKey(autoGenerate = true) val recipient_id: Long = 0,\n    @ColumnInfo(name = \"name\") val name: String,\n    @ColumnInfo(name = \"address\") val address: String\n    )\n\n@Entity(tableName = \"package\",\n    foreignKeys = [\n        ForeignKey(\n            entity = Recipient::class,\n            parentColumns = &#91;\"recipient_id\"&#93;,\n            childColumns = &#91;\"recipient_id\"&#93;\n        )\n    ]\n)\ndata class Package(\n    @PrimaryKey(autoGenerate = true) val package_id: Long = 0,\n    @ColumnInfo(name = \"name\") val name: String,\n    @ColumnInfo(name = \"recipient_id\") val recipient_id: Long\n    )\n\ndata class RecipientPackages(\n    @Embedded val recipient: Recipient,\n    @Relation(\n        parentColumn = \"recipient_id\",\n        entityColumn = \"recipient_id\"\n    )\n    val packages: List&lt;Package>?\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\">@Entity<\/span><span style=\"color: #ADBAC7\">(tableName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;recipient&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\">(autoGenerate <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">true<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> recipient_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> name: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;address&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> address: <\/span><span style=\"color: #F69D50\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Entity<\/span><span style=\"color: #ADBAC7\">(tableName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;package&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    foreignKeys <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">ForeignKey<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            entity <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> Recipient::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            parentColumns <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;<\/span><span style=\"color: #96D0FF\">&quot;recipient_id&quot;<\/span><span style=\"color: #ADBAC7\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            childColumns <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;<\/span><span style=\"color: #96D0FF\">&quot;recipient_id&quot;<\/span><span style=\"color: #ADBAC7\">&#93;<\/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>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\">(autoGenerate <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">true<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> package_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> name: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;recipient_id&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> recipient_id: <\/span><span style=\"color: #F69D50\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">RecipientPackages<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Embedded<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> recipient: <\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Relation<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        parentColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;recipient_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        entityColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;recipient_id&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> packages: <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">&gt;?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>one to one\uacfc \uac70\uc758 \ub3d9\uc77c\ud558\uc9c0\ub9cc, \ub193\uce58\uc9c0 \ub9d0\uc544\uc57c\ud560 \ucc28\uc774\uc810\uc740 @Relation \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uafb8\ubbf8\ub294 \uba64\ubc84\uac00 List&lt;Package&gt;? \ud615\ud0dc\ub77c\ub294 \uc810\uc774\ub2e4. one to many\uc774\uae30 \ub54c\ubb38\uc5d0 \ub9ac\uc2a4\ud2b8 \ud615\ud0dc\ub85c \uc5ec\ub7ec\uac1c\uac00 \uc62c \uc218\ub3c4, null\uc77c\uc218\ub3c4 \uc788\ub2e4. \uc911\uc694\ud558\uc9c4 \uc54a\uc9c0\ub9cc, \uc870\uae08 \ubcc0\ud654\ub8f0 \uc900 \ubd80\ubd84\uc740 @PrimaryKey\uc5d0 autoGenerate\ub97c \uc124\uc815\ud588\ub2e4. \uc790\ub3d9 \uc0dd\uc131\uc744 \uc704\ud574 \ucd08\uae30\uac12 0\ub3c4 \ud560\ub2f9\ud588\ub2e4. <\/p>\n\n\n\n<p>Dao \uc640 Database \uc815\uc758\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>@Dao\ninterface RecipientDao{\n    @Insert\n    suspend fun insertRecipients(vararg recipients: Recipient)\n\n    @Update\n    suspend fun updateRecipients(vararg recipients: Recipient)\n\n    @Delete\n    suspend fun deleteRecipients(vararg recipients: Recipient)\n\n    @Query(\"SELECT * from recipient\")\n    suspend fun getAllRecipients(): List&lt;Recipient>\n}\n\n@Dao\ninterface PackageDao{\n    @Insert\n    suspend fun insertPackages(vararg packages: Package)\n\n    @Update\n    suspend fun updatePackages(vararg packages: Package)\n\n    @Delete\n    suspend fun deletePackages(vararg packages: Package)\n\n    @Query(\"SELECT * FROM package\")\n    suspend fun getAllPackages(): List&lt;Package>\n}\n\n@Dao\ninterface RecipientAndPackagesDao {\n    @Transaction\n    @Query(\"SELECT * from recipient\")\n    suspend fun getAllRecipientAndPackages(): List&lt;RecipientPackages>?\n\n    @Transaction\n    @Query(\"SELECT * from recipient WHERE recipient_id = :id\")\n    suspend fun getRecipient(id: Long): RecipientPackages?\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\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">RecipientDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insertRecipients<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> recipients: <\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">updateRecipients<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> recipients: <\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">deleteRecipients<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> recipients: <\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * from recipient&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getAllRecipients<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Recipient<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">PackageDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insertPackages<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> packages: <\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">updatePackages<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> packages: <\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">deletePackages<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> packages: <\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM package&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getAllPackages<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Package<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">RecipientAndPackagesDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * from recipient&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getAllRecipientAndPackages<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">RecipientPackages<\/span><span style=\"color: #ADBAC7\">&gt;?<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * from recipient WHERE recipient_id = :id&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getRecipient<\/span><span style=\"color: #ADBAC7\">(id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">RecipientPackages<\/span><span style=\"color: #ADBAC7\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\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;Recipient::class, Package::class&#93;, version=1)\nabstract class PackageDatabase: RoomDatabase(){\n    abstract fun recipientDao(): RecipientDao\n    abstract fun packageDao(): PackageDao\n    abstract fun recipientAndPackageDao(): RecipientAndPackagesDao\n\n    companion object {\n\n        \/\/ For Singleton instantiation\n        @Volatile private var instance: PackageDatabase? = null\n\n        fun getInstance(context: Context): PackageDatabase {\n            return instance ?: synchronized(this) {\n                instance ?: buildDatabase(context).also { instance = it }\n            }\n        }\n\n        private fun buildDatabase(context: Context): PackageDatabase{\n            return Room.databaseBuilder(context, PackageDatabase::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;Recipient::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">, Package::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">&#93;, version<\/span><span style=\"color: #F47067\">=<\/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\">PackageDatabase<\/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\">recipientDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">RecipientDao<\/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\">packageDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">PackageDao<\/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\">recipientAndPackageDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">RecipientAndPackagesDao<\/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>\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\">PackageDatabase<\/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\">PackageDatabase<\/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\">PackageDatabase<\/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, PackageDatabase::<\/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>one to one\uacfc \ubcc4\ub2e4\ub978 \uc810\uc740 \uc5c6\ub2e4. \ubc14\ub85c \uc0ac\uc6a9 \uc608\ub97c \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(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>private suspend fun packagesSample(){\n    val database = PackageDatabase.getInstance(getApplication())\n    val recipientDao = database.recipientDao()\n    val packageDao = database.packageDao()\n    val recipientAndPackagesDao = database.recipientAndPackageDao()\n\n    withContext(Dispatchers.IO){\n        database.clearAllTables()\n    }\n\n    recipientDao.insertRecipients(\n        Recipient(1, \"\uae40\ud0dd\ubc30\", \"\uc11c\uc6b8\uc2dc \uc9ec\ubf55\ub3d9 11-22\"),\n        Recipient(2, \"\ud3ec\uc7a5\uc9c0\", \"\ubd80\uc0b0\uc2dc \uc9ec\uc9dc\ub3d9 33-44\"),\n        Recipient(3, \"\uac15\ubcbd\ub3cc\", \"\ub300\uc804\uc2dc \uc0ac\uae30\ub3d9 55-77\"),\n    )\n\n    packageDao.insertPackages(\n        Package(name = \"\ud587\ubc18 \ud55c\uc0c1\uc790\", recipient_id = 1),\n        Package(name = \"\ucef5\ub77c\uba74\ubc15\uc2a4\", recipient_id = 1),\n        Package(name = \"\ucee4\ud53c\ud3ec\ud2b8\", recipient_id = 1),\n\n        Package(name = \"\ubc15\uc2a4\ud2f0\", recipient_id = 2),\n        Package(name = \"\uc591\ub9d0\", recipient_id = 2),\n\n        Package(name = \"\uc544\uc774\ud3f0\", recipient_id = 3),\n        Package(name = \"\uc544\uc774\ud31f\", recipient_id = 3),\n    )\n\n    val allItems = recipientAndPackagesDao.getAllRecipientAndPackages()\n\n    allItems?.forEach {\n        Log.i(\"room test\", it.toString())\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\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">packagesSample<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> database <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> PackageDatabase.<\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">getApplication<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> recipientDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">recipientDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> packageDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">packageDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> recipientAndPackagesDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">recipientAndPackageDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">withContext<\/span><span style=\"color: #ADBAC7\">(Dispatchers.IO){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        database.<\/span><span style=\"color: #DCBDFB\">clearAllTables<\/span><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\">    recipientDao.<\/span><span style=\"color: #DCBDFB\">insertRecipients<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Recipient<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\uae40\ud0dd\ubc30&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\uc11c\uc6b8\uc2dc \uc9ec\ubf55\ub3d9 11-22&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Recipient<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\ud3ec\uc7a5\uc9c0&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\ubd80\uc0b0\uc2dc \uc9ec\uc9dc\ub3d9 33-44&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Recipient<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\uac15\ubcbd\ub3cc&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;\ub300\uc804\uc2dc \uc0ac\uae30\ub3d9 55-77&quot;<\/span><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\">    packageDao.<\/span><span style=\"color: #DCBDFB\">insertPackages<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\ud587\ubc18 \ud55c\uc0c1\uc790&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/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: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\ucef5\ub77c\uba74\ubc15\uc2a4&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/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: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\ucee4\ud53c\ud3ec\ud2b8&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/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>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\ubc15\uc2a4\ud2f0&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\uc591\ub9d0&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\uc544\uc774\ud3f0&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Package<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\uc544\uc774\ud31f&quot;<\/span><span style=\"color: #ADBAC7\">, recipient_id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><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\">val<\/span><span style=\"color: #ADBAC7\"> allItems <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> recipientAndPackagesDao.<\/span><span style=\"color: #DCBDFB\">getAllRecipientAndPackages<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    allItems?.<\/span><span style=\"color: #DCBDFB\">forEach<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Log.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;room test&quot;<\/span><span style=\"color: #ADBAC7\">, it.<\/span><span style=\"color: #DCBDFB\">toString<\/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><\/code><\/pre><\/div>\n\n\n\n<p>\uc5ed\uc2dc \uc775\ud788 \uc544\ub294 \ub0b4\uc6a9\ub4e4\uc774\ub2e4. \uc0ac\uc18c\ud55c \ubcc0\ud654\ub294 \uc55e\uc11c Entity \uc815\uc758\uc2dc PrimaryKey\ub97c autogenerate\ub85c \uc124\uc815\ud588\uae30 \ub54c\ubb38\uc5d0 insert\uc2dc\uc5d0 id\uc5c6\uc774 \uc0bd\uc785 \uac00\ub2a5\ud558\ub2e4\ub294 \uc810\uc774\ub2e4. \ucf54\ud2c0\ub9b0 \ucf54\ub4dc\uc0c1\uc5d0\uc11c id\ub97c \uc2a4\ud0b5\ud558\uae30 \uc704\ud574\uc11c name=&#8221;&#8221;, recipient_id=&#8221;&#8221;\uc640 \uac19\uc774 named argument\ub97c \uc0ac\uc6a9\ud588\ub2e4. \uc0ac\uc18c\ud558\uc9c0\ub9cc, \ucd9c\ub825 \ub8e8\ud504\ub3c4 \uc870\uae08 \ubcc0\uacbd\ud574\ubd24\ub2e4. \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc628\ub2e4.<\/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>RecipientPackages(recipient=Recipient(recipient_id=1, name=\uae40\ud0dd\ubc30, address=\uc11c\uc6b8\uc2dc \uc9ec\ubf55\ub3d9 11-22), \n     packages=&#91;\n         Package(package_id=1, name=\ud587\ubc18 \ud55c\uc0c1\uc790, recipient_id=1), \n         Package(package_id=2, name=\ucef5\ub77c\uba74\ubc15\uc2a4, recipient_id=1), \n         Package(package_id=3, name=\ucee4\ud53c\ud3ec\ud2b8, recipient_id=1)\n     &#93;\n )\n RecipientPackages(recipient=Recipient(recipient_id=2, name=\ud3ec\uc7a5\uc9c0, address=\ubd80\uc0b0\uc2dc \uc9ec\uc9dc\ub3d9 33-44), \n     packages=&#91;\n         Package(package_id=4, name=\ubc15\uc2a4\ud2f0, recipient_id=2), \n         Package(package_id=5, name=\uc591\ub9d0, recipient_id=2)\n     &#93;\n )\n RecipientPackages(recipient=Recipient(recipient_id=3, name=\uac15\ubcbd\ub3cc, address=\ub300\uc804\uc2dc \uc0ac\uae30\ub3d9 55-77), \n     packages=&#91;\n         Package(package_id=6, name=\uc544\uc774\ud3f0, recipient_id=3), \n         Package(package_id=7, name=\uc544\uc774\ud31f, recipient_id=3)\n     &#93;\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\">RecipientPackages(recipient<\/span><span style=\"color: #ADBAC7\">=Recipient(recipient_id=1, <\/span><span style=\"color: #96D0FF\">name=\uae40\ud0dd\ubc30,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">address=\uc11c\uc6b8\uc2dc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\uc9ec\ubf55\ub3d9<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">-22<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     packages<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=1, <\/span><span style=\"color: #96D0FF\">name=\ud587\ubc18<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\ud55c\uc0c1\uc790,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=2, <\/span><span style=\"color: #96D0FF\">name=\ucef5\ub77c\uba74\ubc15\uc2a4,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=3, <\/span><span style=\"color: #96D0FF\">name=\ucee4\ud53c\ud3ec\ud2b8,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">RecipientPackages(recipient<\/span><span style=\"color: #ADBAC7\">=Recipient(recipient_id=2, <\/span><span style=\"color: #96D0FF\">name=\ud3ec\uc7a5\uc9c0,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">address=\ubd80\uc0b0\uc2dc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\uc9ec\uc9dc\ub3d9<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">33<\/span><span style=\"color: #96D0FF\">-44<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     packages<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=4, <\/span><span style=\"color: #96D0FF\">name=\ubc15\uc2a4\ud2f0,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=5, <\/span><span style=\"color: #96D0FF\">name=\uc591\ub9d0,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">RecipientPackages(recipient<\/span><span style=\"color: #ADBAC7\">=Recipient(recipient_id=3, <\/span><span style=\"color: #96D0FF\">name=\uac15\ubcbd\ub3cc,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">address=\ub300\uc804\uc2dc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\uc0ac\uae30\ub3d9<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">55<\/span><span style=\"color: #96D0FF\">-77<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     packages<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=6, <\/span><span style=\"color: #96D0FF\">name=\uc544\uc774\ud3f0,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         <\/span><span style=\"color: #F69D50\">Package(package_id<\/span><span style=\"color: #ADBAC7\">=7, <\/span><span style=\"color: #96D0FF\">name=\uc544\uc774\ud31f,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">recipient_id=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> )<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Many to Many<\/h3>\n\n\n\n<p> \ub300\ub9dd\uc758 many to many relationship\uc774\ub2e4. \uc0c9\ub2e4\ub978 \ubd80\ubd84\uc740 \ub450 \ud14c\uc774\ube14\uac04\uc744 \uc5f0\uacb0\ud558\ub294 \uc815\uc158(\ub610\ub294 \ube0c\ub9bf\uc9c0) \ud14c\uc774\ube14\uc758 \uc874\uc7ac\uc778\ub370, \uc2a4\ud0a4\ub9c8 \uad6c\uc870\uc5d0 \ub300\ud574\uc120 SQLite\uc5d0\uc11c \uc774\ubbf8 \ub2e4\ub918\ub2e4. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"694\" height=\"168\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2021\/05\/bookmark_tag.png\" alt=\"\" class=\"wp-image-907\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/bookmark_tag.png 694w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2021\/05\/bookmark_tag-300x73.png 300w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/figure>\n<\/div>\n\n\n<p>\uc815\uc158 \ud14c\uc774\ube14\uc774 \uc5c6\uc73c\uba74, \ub370\uc774\ud130\uc758 \uc911\ubcf5\uc774 \ubc1c\uc0dd\ud558\ubbc0\ub85c \uc790\uc5f0\uc2a4\ub7fd\uac8c \ub3c4\ucd9c\ub418\ub294 \uad6c\uc870\uc774\ub2e4. Entity \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud574\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(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>@Entity(tableName = \"bookmark\")\ndata class Bookmark(\n    @PrimaryKey val bookmark_id: Long,\n    @ColumnInfo(name = \"name\") val name: String?,\n    @ColumnInfo(name= \"url\") val url: String?\n)\n\n@Entity(tableName = \"tag\")\ndata class Tag(\n    @PrimaryKey val tag_id: Long,\n    @ColumnInfo(name = \"tag_name\") val tag_name: String?\n)\n\n@Entity(\n    tableName = \"bookmark_tag\",\n    primaryKeys = &#91;\"bookmark_id\", \"tag_id\"&#93;\n)\ndata class BookmarkTag(\n    @ColumnInfo(name = \"bookmark_id\") val bookmark_id: Long,\n    @ColumnInfo(name = \"tag_id\") val tag_id: Long\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\">@Entity<\/span><span style=\"color: #ADBAC7\">(tableName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;bookmark&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Bookmark<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmark_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> name: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;url&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> url: <\/span><span style=\"color: #F69D50\">String<\/span><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: #F69D50\">@Entity<\/span><span style=\"color: #ADBAC7\">(tableName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;tag&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@PrimaryKey<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tag_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;tag_name&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tag_name: <\/span><span style=\"color: #F69D50\">String<\/span><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: #F69D50\">@Entity<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    tableName <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;bookmark_tag&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    primaryKeys <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> &#91;<\/span><span style=\"color: #96D0FF\">&quot;bookmark_id&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;tag_id&quot;<\/span><span style=\"color: #ADBAC7\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;bookmark_id&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmark_id: <\/span><span style=\"color: #F69D50\">Long<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@ColumnInfo<\/span><span style=\"color: #ADBAC7\">(name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;tag_id&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tag_id: <\/span><span style=\"color: #F69D50\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc815\uc158 \ud14c\uc774\ube14 bookmark_tag \ucd94\uac00\ub418\uc5b4 \uc788\uc74c\uc744 \ubcfc \uc218 \uc788\ub2e4. \uc815\uc158\ud14c\uc774\ube14\uc758 Primary key\ub294 \ubcc4\ub3c4\ub85c \uc0dd\uc131\ud558\uc9c0 \uc54a\uace0 \ub450 \ud14c\uc774\ube14\uc758 id\uac00 \ud569\uccd0\uc9c4 \ubcf5\ud569\ud0a4(Composite key)\ub85c \uc815\uc758\ub418\uc5b4 \uc788\ub2e4. Room\uc5d0\uc11c \ubcf5\ud569\ud0a4\ub97c \uc774\ub807\uac8c \uc815\uc758\ud55c\ub2e4\ub294 \uac83\ub3c4 \uc54c\uac8c\ub418\uc5c8\ub2e4. <\/p>\n\n\n\n<p>\ucffc\ub9ac\ub85c \ubc1b\uc544\uc62c \ub370\uc774\ud130 \ud074\ub798\uc2a4\uc640 relation\uc744 \uad6c\ud604\ud574\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(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>data class BookmarkWithTags(\n    @Embedded val bookmark: Bookmark,\n    @Relation(\n        parentColumn = \"bookmark_id\",\n        entityColumn = \"tag_id\",\n        associateBy = Junction(BookmarkTag::class)\n    )\n    val tags: List&lt;Tag>?\n)\n\ndata class TagWithBookmarks(\n    @Embedded val tag: Tag,\n    @Relation(\n        parentColumn = \"tag_id\",\n        entityColumn = \"bookmark_id\",\n        associateBy = Junction(BookmarkTag::class)\n    )\n    val bookmarks: List&lt;Bookmark>?\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\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BookmarkWithTags<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Embedded<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmark: <\/span><span style=\"color: #F69D50\">Bookmark<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Relation<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        parentColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;bookmark_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        entityColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;tag_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        associateBy <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">Junction<\/span><span style=\"color: #ADBAC7\">(BookmarkTag::<\/span><span style=\"color: #DCBDFB\">class<\/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 style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tags: <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Tag<\/span><span style=\"color: #ADBAC7\">&gt;?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">data<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TagWithBookmarks<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Embedded<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tag: <\/span><span style=\"color: #F69D50\">Tag<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Relation<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        parentColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;tag_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        entityColumn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;bookmark_id&quot;<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        associateBy <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">Junction<\/span><span style=\"color: #ADBAC7\">(BookmarkTag::<\/span><span style=\"color: #DCBDFB\">class<\/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 style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmarks: <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">Bookmark<\/span><span style=\"color: #ADBAC7\">&gt;?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>@Relation \uc5b4\ub178\ud14c\uc774\uc158\uc5d0 \uc0c8\ub85c\uc6b4 \ubd80\ubd84\uc774 \ubcf4\uc778\ub2e4. associateBy = Junction() \ubd80\ubd84\uc778\ub370, \ubc14\ub85c \uc815\uc158 \ud14c\uc774\ube14\uc744 \uc9c0\uc815\ud574\uc8fc\uace0 \uc788\ub2e4. parentColumn, entityColumn\uc740 \uae30\uc874\uc5d0 \uc0ac\uc6a9\ud588\ub358 \ubc29\ubc95\uacfc \ub3d9\uc77c\ud55c\ub370, Junction\uc744 \ucd94\uac00\ub418\uc5b4 \uc815\uc158\ud14c\uc774\ube14\uc758 \ucc98\ub9ac\ub97c Room\uc5d0\uc11c \uc54c\uc544\uc11c \ud574\uc8fc\uac8c \ub41c\ub2e4. SQLite\uc5d0\uc11c\uc758 \ucffc\ub9ac\ubb38\uc744 \ub418\ub3cc\uc544 \ubcf4\uba74, 3\uac1c\uc758 \ud14c\uc774\ube14\uc744 \ub450\ubc88\uc758 JOIN\uc73c\ub85c \uaf64 \ubcf5\uc7a1\ud558\uac8c \ucc98\ub9ac\ud588\uc5c8\ub2e4. <\/p>\n\n\n\n<p>\uc774\uc81c Dao\ub97c \uad6c\ud604\ud574\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(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>@Dao\ninterface BookmarkDao {\n    @Insert\n    suspend fun insert(vararg bookmarks: Bookmark)\n\n    @Update\n    suspend fun update(vararg bookmarks: Bookmark)\n\n    @Delete\n    suspend fun delete(vararg bookmarks: Bookmark)\n}\n\n@Dao\ninterface TagDao{\n    @Insert\n    suspend fun insert(vararg tags: Tag)\n\n    @Update\n    suspend fun update(vararg tags: Tag)\n\n    @Delete\n    suspend fun delete(vararg tags: Tag)\n}\n\n@Dao\ninterface BookmarkTagJunctionDao{\n    @Insert\n    suspend fun insert(vararg bookmarkTag: BookmarkTag)\n\n    @Update\n    suspend fun update(vararg bookmarkTag: BookmarkTag)\n\n    @Delete\n    suspend fun delete(vararg bookmarkTag: BookmarkTag)\n}\n\n@Dao\ninterface BookmarkAndTagDao{\n    @Transaction\n    @Query(\"SELECT * FROM bookmark WHERE name = :bookmarkName\")\n    suspend fun getBookmarkTags(bookmarkName: String): List&lt;BookmarkWithTags>\n\n    @Transaction\n    @Query(\"SELECT * FROM tag WHERE tag_name = :tagName\")\n    suspend fun getTagBookmarks(tagName: String): List&lt;TagWithBookmarks>\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\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BookmarkDao<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarks: <\/span><span style=\"color: #F69D50\">Bookmark<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">update<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarks: <\/span><span style=\"color: #F69D50\">Bookmark<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">delete<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarks: <\/span><span style=\"color: #F69D50\">Bookmark<\/span><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: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TagDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tags: <\/span><span style=\"color: #F69D50\">Tag<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">update<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tags: <\/span><span style=\"color: #F69D50\">Tag<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">delete<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> tags: <\/span><span style=\"color: #F69D50\">Tag<\/span><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: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BookmarkTagJunctionDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Insert<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarkTag: <\/span><span style=\"color: #F69D50\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">update<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarkTag: <\/span><span style=\"color: #F69D50\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Delete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">delete<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">vararg<\/span><span style=\"color: #ADBAC7\"> bookmarkTag: <\/span><span style=\"color: #F69D50\">BookmarkTag<\/span><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: #F69D50\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">interface<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BookmarkAndTagDao<\/span><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM bookmark WHERE name = :bookmarkName&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getBookmarkTags<\/span><span style=\"color: #ADBAC7\">(bookmarkName: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">BookmarkWithTags<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">@Query<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;SELECT * FROM tag WHERE tag_name = :tagName&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getTagBookmarks<\/span><span style=\"color: #ADBAC7\">(tagName: <\/span><span style=\"color: #F69D50\">String<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">List<\/span><span style=\"color: #ADBAC7\">&lt;<\/span><span style=\"color: #F69D50\">TagWithBookmarks<\/span><span style=\"color: #ADBAC7\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Entity\uc640 Relation\ub4e4\uc774 \uc798 \uc815\uc758\ub418\uc5b4 \uc788\uc73c\uba74, Dao\uad6c\ud604\uc740 \uadf8\ub2e4\uc9c0 \uc5b4\ub835\uc9c0 \uc54a\ub2e4. BookmarkAndTagDao\uc5d0\uc11c \ud2b9\uc815 \ubd81\ub9c8\ud06c\uc5d0 \ub538\ub9b0 \ud0dc\uadf8\ub4e4\uc744 \uac00\uc838\uc624\ub294 getBookmarkTags()\uc640 \ud2b9\uc815 \ud0dc\uadf8\uc758 \ubd81\ub9c8\ud06c\ub4e4\uc744 \uac00\uc838\uc624\ub294 getTagBookmarks()\ub97c \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c database\ub97c \ub9cc\ub4e4\uace0 \uc0ac\uc6a9\ud574\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(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;Bookmark::class, Tag::class, BookmarkTag::class&#93;, version = 1)\nabstract class BookmarkDatabase: RoomDatabase() {\n    abstract fun bookmarkDao(): BookmarkDao\n    abstract fun tagDao(): TagDao\n    abstract fun bookamrkTagJunctionDao(): BookmarkTagJunctionDao\n    abstract fun bookmarkAndTagDao(): BookmarkAndTagDao\n\n    companion object {\n\n        \/\/ For Singleton instantiation\n        @Volatile private var instance: BookmarkDatabase? = null\n\n        fun getInstance(context: Context): BookmarkDatabase {\n            return instance ?: synchronized(this) {\n                instance ?: buildDatabase(context).also { instance = it }\n            }\n        }\n\n        private fun buildDatabase(context: Context): BookmarkDatabase{\n            return Room.databaseBuilder(context, BookmarkDatabase::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;Bookmark::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">, Tag::<\/span><span style=\"color: #DCBDFB\">class<\/span><span style=\"color: #ADBAC7\">, BookmarkTag::<\/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\">BookmarkDatabase<\/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\">bookmarkDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">BookmarkDao<\/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\">tagDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">TagDao<\/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\">bookamrkTagJunctionDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">BookmarkTagJunctionDao<\/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\">bookmarkAndTagDao<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">BookmarkAndTagDao<\/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>\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\">BookmarkDatabase<\/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\">BookmarkDatabase<\/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\">BookmarkDatabase<\/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, BookmarkDatabase::<\/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>Database\ub294 \uadf8\uc800 \ub9cc\ub4e4\uc5b4\uc9c4 Dao interface\ub4e4\uc744 \ub9ac\ud134\ud574\uc8fc\ub294\uac8c \uc804\ubd80\uae30 \ub54c\ubb38\uc5d0 \ub354 \uac04\ub2e8\ud558\ub2e4. Singleton \uad6c\ud604\ubd80\ubd84\uc774 \ub3d9\uc77c\ud55c\ub370, \ub9ac\ud134\ud558\ub294 \ud074\ub798\uc2a4\uc774\ub984\ub9cc \uc218\uc815\ud558\ub2e4\ubcf4\ub2c8, \uc218\uc815\uc5c6\uc774 \uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ubc29\ubc95\uc744 \uace0\ubbfc\ud574\ubcfc\ub9cc\ud55c\ub370, \ub2f9\uc7a5 \uc27d\uac8c \ub2f5\uc774 \ub5a0\uc624\ub974\uc9c4 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p>\ub9cc\ub4e4\uc5b4\uc9c4 database\uc758 \uc0ac\uc6a9 \uc608\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>suspend fun bookmarkSample(){\n    val database = BookmarkDatabase.getInstance(getApplication())\n    val bookmarkDao = database.bookmarkDao()\n    val tagDao = database.tagDao()\n    val junctionDao = database.bookamrkTagJunctionDao()\n    val bookmarkAndTagDao = database.bookmarkAndTagDao()\n\n    withContext(Dispatchers.IO){\n        database.clearAllTables()\n    }\n\n    bookmarkDao.insert(\n        Bookmark(1, \"android developer\", \"https:\/\/developer.android.com\/\"),\n        Bookmark(2, \"unity\", \"https:\/\/unity.com\"),\n        Bookmark(3, \"kotlin\", \"https:\/\/kotlinlang.org\/\")\n    )\n\n    tagDao.insert(\n        Tag(1, \"programming\"),\n        Tag(2, \"android\"),\n        Tag(3, \"unity\"),\n        Tag(4, \"game\"),\n        Tag(5, \"kotlin\"),\n        Tag(6, \"language\")\n    )\n\n    junctionDao.insert(\n        BookmarkTag(1, 1),\n        BookmarkTag(1, 2),\n\n        BookmarkTag(2, 1),\n        BookmarkTag(2, 3),\n        BookmarkTag(2, 4),\n\n        BookmarkTag(3, 1),\n        BookmarkTag(3, 5),\n        BookmarkTag(3, 6)\n    )\n\n    val bookmarkTags = bookmarkAndTagDao.getBookmarkTags(\"kotlin\")\n    val tagBookmarks = bookmarkAndTagDao.getTagBookmarks(\"programming\")\n\n    Log.i(\"room test\", bookmarkTags.toString())\n    Log.i(\"room test\", tagBookmarks.toString())\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\">suspend<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">bookmarkSample<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> database <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> BookmarkDatabase.<\/span><span style=\"color: #DCBDFB\">getInstance<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">getApplication<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmarkDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">bookmarkDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tagDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">tagDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> junctionDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">bookamrkTagJunctionDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> bookmarkAndTagDao <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.<\/span><span style=\"color: #DCBDFB\">bookmarkAndTagDao<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">withContext<\/span><span style=\"color: #ADBAC7\">(Dispatchers.IO){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        database.<\/span><span style=\"color: #DCBDFB\">clearAllTables<\/span><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\">    bookmarkDao.<\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Bookmark<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;android developer&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;https:\/\/developer.android.com\/&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Bookmark<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;unity&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;https:\/\/unity.com&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Bookmark<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;kotlin&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;https:\/\/kotlinlang.org\/&quot;<\/span><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\">    tagDao.<\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;programming&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;android&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;unity&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;game&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">5<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;kotlin&quot;<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">Tag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">6<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;language&quot;<\/span><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\">    junctionDao.<\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/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: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/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: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/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: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">5<\/span><span style=\"color: #ADBAC7\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">BookmarkTag<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #6CB6FF\">6<\/span><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\">val<\/span><span style=\"color: #ADBAC7\"> bookmarkTags <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> bookmarkAndTagDao.<\/span><span style=\"color: #DCBDFB\">getBookmarkTags<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;kotlin&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> tagBookmarks <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> bookmarkAndTagDao.<\/span><span style=\"color: #DCBDFB\">getTagBookmarks<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;programming&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    Log.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;room test&quot;<\/span><span style=\"color: #ADBAC7\">, bookmarkTags.<\/span><span style=\"color: #DCBDFB\">toString<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    Log.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;room test&quot;<\/span><span style=\"color: #ADBAC7\">, tagBookmarks.<\/span><span style=\"color: #DCBDFB\">toString<\/span><span style=\"color: #ADBAC7\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc704 \uc0d8\ud50c \ucf54\ub4dc\uc758 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/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>[BookmarkWithTags(bookmark=Bookmark(bookmark_id=3, name=kotlin, url=https:\/\/kotlinlang.org\/), \n     tags=&#91;\n         Tag(tag_id=1, tag_name=programming), \n         Tag(tag_id=5, tag_name=kotlin), \n         Tag(tag_id=6, tag_name=language)&#93;)]\n [TagWithBookmarks(tag=Tag(tag_id=1, tag_name=programming), \n     bookmarks=&#91;\n         Bookmark(bookmark_id=1, name=android developer, url=https:\/\/developer.android.com\/), \n         Bookmark(bookmark_id=2, name=unity, url=https:\/\/unity.com), \n         Bookmark(bookmark_id=3, name=kotlin, url=https:\/\/kotlinlang.org\/)\n         &#93;)]<\/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: #ADBAC7\">[BookmarkWithTags(bookmark<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">Bookmark(bookmark_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">kotlin, url<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">https:\/\/kotlinlang.org\/), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     tags<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Tag(tag_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, tag_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">programming), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Tag(tag_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">5<\/span><span style=\"color: #ADBAC7\">, tag_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">kotlin), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Tag(tag_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">6<\/span><span style=\"color: #ADBAC7\">, tag_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">language)&#93;)]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> [TagWithBookmarks(tag<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">Tag(tag_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, tag_name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">programming), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">     bookmarks<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Bookmark(bookmark_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">, name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">android developer, url<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">https:\/\/developer.android.com\/), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Bookmark(bookmark_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">, name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">unity, url<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">https:\/\/unity.com), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         Bookmark(bookmark_id<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">, name<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">kotlin, url<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">https:\/\/kotlinlang.org\/)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">         &#93;)]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\ub9c8\ubb34\ub9ac\uc774&#8230;<\/h3>\n\n\n\n<p>\ub098\ub85c\uc11c\ub3c4 \ucc98\uc74c \ub2e4\ub8e8\ub294\uac78 \ucf54\ub4dc\ub97c \uc9dc\ubcf4\uace0 \ud14c\uc2a4\ud2b8 \ud574\ubcf4\uba70 \uc791\uc131\ud558\ub2e4\ubcf4\ub2c8 Room\uc5d0 \ub300\ud574 \ubaa8\ub4e0\uac78 \uc124\uba85\ud558\uc9c4 \ubabb\ud588\uc9c0\ub9cc, Relationship\uc5d0 \ub530\ub978 \uad6c\ud604\uc744 \ud544\uc694\ud55c \ub9cc\ud07c\uc740 \uc54c\uc544\ubcf4\uc558\ub2e4. \ub2e4\ub978 \uc0ac\ub78c\uc774 \ubcf4\uae30\uc5d4 \uc5b4\ub5a8\uc9c0 \ubab0\ub77c\ub3c4 \uc77c\ub2e8 \ub0b4\uac00 \ub2e4\uc2dc \ucc3e\uc544\ubcfc \ub54c \ud544\uc694\ud55c \ub0b4\uc6a9\uc740 \ub2e4\ub8ec\ub4ef. \ubcf5\uc7a1\ud55c DB \uad6c\uc870\ub97c \uc0ac\uc6a9\ud558\ub294\uac8c \uc544\ub2c8\ub77c\uba74, \uc77c\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294\ub370 \ubb38\uc81c\uc5c6\uc744 \uc815\ub3c4\uc758 \ub0b4\uc6a9\uc774\uc5c8\ub358\uac70 \uac19\ub2e4. \ubc14\ub85c \uc774\uc804\uc5d0 \ud3ec\uc2a4\ud305\ud55c <a href=\"http:\/\/batmask.dothome.co.kr\/index.php\/2021\/05\/09\/898\/\">DB relationship with SQLite<\/a> \uc640 \ube44\uad50\ud574\uc11c \ubcf4\uba74 \uc774\ud574\ud558\uae30 \uc88b\uc744\uac83\uc774\ub2e4. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc55e\uc11c DB relationship \uc5d0 \ub300\ud574 SQLite\ub85c \uc54c\uc544\ubcf4\uc558\ub2e4. one to one, one to many, many to many relationship\uc5d0 \ub300\ud574\uc120 \uc774\uc804\uae00\uc744 \ucc38\uace0\ud558\uace0, \ub3d9\uc77c\ud55c \ub0b4\uc6a9\uc744 Room\uc5d0\uc11c \uad6c\ud604\ud574\ubcf4\uc790. Room \uc801\uc6a9\uc2dc \uaf2d \uc9c1\uc811 \ud14c\uc2a4\ud2b8 \ud558\uae38 \ubc14\ub780\ub2e4. \ucc98\uc74c \uc0ac\uc6a9\ud574\ubcf4\uba74\uc11c SQL\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\ubcf4\ub2e4 \uc624\ud788\ub824 \ud63c\ub780\uc2a4\ub7ec\uc6b4 \uc810\ub3c4 \ub9ce\uc558\ub2e4. \uc608\ub97c\ub4e4\uc5b4, api level 24 \uc778 android 7.0 \uc5d0\ubbac\ub808\uc774\ud130\uc5d0\uc120 \ud14c\uc774\ube14 \uc0dd\uc131\uc774 \uc548\ub41c\uac74\uc9c0 \uadf8\ub7f0 \ud14c\uc774\ube14\uc774 \uc5c6\ub2e4\uba70 \uc624\ub958\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,34],"tags":[186,216,214,38,215,213],"class_list":["post-938","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-android-2","tag-database","tag-db","tag-kotlin","tag-relationship","tag-room"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/938","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=938"}],"version-history":[{"count":39,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/938\/revisions"}],"predecessor-version":[{"id":3554,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/938\/revisions\/3554"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=938"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}