{"id":368,"date":"2018-06-20T14:28:55","date_gmt":"2018-06-20T05:28:55","guid":{"rendered":"http:\/\/www.charlezz.com\/?p=368"},"modified":"2018-06-20T14:28:55","modified_gmt":"2018-06-20T05:28:55","slug":"android-architecture-component-room","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=368","title":{"rendered":"Android Architecture Component &#8211; Room"},"content":{"rendered":"<h2>Room\uc744 \ud65c\uc6a9\ud558\uc5ec Local \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 data\ub97c \uc800\uc7a5\ud574\ubcf4\uc790<\/h2>\n<p>Room \uc740 SQLite\ub97c \ucd94\uc0c1\uacc4\uce35\uc73c\ub85c \uac10\uc2f8\uace0 \uc788\uc73c\uba70, \uc27d\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc811\uadfc\ud558\uc5ec SQLite\ub97c \ub9c8\uad6c\ub9c8\uad6c \uc790\uc720\ub86d\uac8c \ud480\ud30c\uc6cc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<br \/>\nRoom\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 \ub9cc\ub9cc\uce58 \uc54a\uc740 \uc591\uc758 \uad6c\uc870\ud654\ub41c \ub370\uc774\ud130\ub97c \uc601\uad6c\uc801\uc73c\ub85c \uc800\uc7a5\ud558\uace0 \ucc98\ub9ac\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\ub3c4 \uadf8\ub920\uc787 \ud558\uac8c \uc774\ub4dd\uc744 \ubcfc\uc218 \uc788\ub294 \ubd80\ubd84\uc774 \uc788\ub2e4.<br \/>\n\ub300\ubd80\ubd84\uc758 \uacbd\uc6b0\ub294 \uad00\ub828 \ub370\uc774\ud130\uc758 \uc870\uac01\ub4e4\uc744 \uce90\uc2dc\ud654 \ud558\ub294\uac83\uc774\uc600\ub2e4. \uc774 \ubc29\ubc95\uc5d0\uc11c\ub294 \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc811\uc18d\ud560 \uc218\uac00 \uc5c6\uc744\ub54c \uc720\uc838\uac00 \uc5ec\uc804\ud788 \uc624\ud504\ub77c\uc778\ub3d9\uc548 \ucf58\ud150\uce20\ub97c \ub458\ub7ec\ubcfc\uc218 \uc788\uc5c8\ub2e4.<br \/>\n\uc0ac\uc6a9\uc790\uac00 \uc791\uc131\ud558\uae30 \uc2dc\uc791\ud55c \ubaa8\ub4e0 \ucee8\ud150\uce20\uc758 \ubcc0\uacbd\uc0ac\ud56d\uc740 \uae30\uae30\uac00 \uc628\ub77c\uc778\uc73c\ub85c \ub2e4\uc2dc \uc811\uc18d\ub418\uba74 \ub3d9\uae30\ud654\uac00 \uc774\ub8e8\uc5b4 \uc9c4\ub2e4.<br \/>\n\uc65c\ub0d0\uba74 Room\uc740 \uc774\ub7ec\ud55c \ubd80\ubd84\uae4c\uc9c0 \ub2e4 \ucf00\uc5b4 \ud574\uc8fc\ub2c8\uae4c!(\ucc21\uae0b)<br \/>\n\uad6c\uae00\uc740 \uadf8\ub798\uc11c Room\uc758 \uc0ac\uc6a9\uc744 \uac15\ucd94 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. SQLite\uc4f0\ub294\uac70 \ub300\uc2e0\uc5d0 \ub9d0\uc774\uc8f5.<br \/>\n\uc5b4\uca0c\uac70\ub098, SQLite API\ub97c \uc9c1\uc811\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uae38 \uc6d0\ud55c\ub2e4\uba74 \ub9d0\ub9ac\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.<br \/>\nRoom\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 3\uac00\uc9c0 \uc8fc\uc694\ud55c \uad6c\uc131\uc694\uc18c\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: square;\">\n<li>Database : \u00a0\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud640\ub354\ub97c \ud3ec\ud568\ud558\uace0, \uad00\uacc4\ud615 \ub370\uc774\ud130 \ubca0\uc774\uc2a4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8\ub97c \uc81c\uacf5\ud55c\ub2e4.<br \/>\n@Database\ub77c\ub294 \uc560\ub178\ud14c\uc774\uc158\uc744 \ud074\ub798\uc2a4\uc5d0 \ub2ec\uc544\uc57c \ud558\uba70,\u00a0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc870\uac74\uc744 \ub9cc\uc871\ud574\uc57c\ud55c\ub2e4.<\/p>\n<ul style=\"list-style-type: square;\">\n<li>RoomDatabase\ub97c \uc0c1\uc18d\ud574\uc57c\ud55c abstract class\uc5ec\uc57c \ud55c\ub2e4.<\/li>\n<li>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uad00\ub828\ub41c \uc5d4\ud2f0\ud2f0\ub4e4\uc744 \uc560\ub178\ud14c\uc774\uc158\uc758 \uc778\uc790\uac12\uc73c\ub85c \ud3ec\ud568\ud574\uc57c\ud55c\ub2e4.<\/li>\n<li>abstract method \ud3ec\ud568\ud574\uc57c\ud558\ub294\ub370, \uc774 \uba54\uc18c\ub4dc\uc5d0\ub294 \uc778\uc790\uac00 0\uac1c\uc774\uace0 return \ub418\ub294\ud074\ub798\uc2a4\uac00\u00a0@Dao \uc560\ub178\ud14c\uc774\uc158\uc744 \ub2ec\uace0 \uc788\uc5b4\uc57c\ud55c\ub2e4.<\/li>\n<\/ul>\n<p>\ub7f0\ud0c0\uc784\ub54c\uc5d0\ub294 Room.databaseBuilder() \ub610\ub294 Room.inMemoryDatabaseBuilder()\ub97c \ud1b5\ud574 Database\uc758 \uac1d\uccb4\ub97c \uc5bb\uc5b4 \ub0bc \uc218 \uc788\ub2e4.<\/li>\n<li>Entity : \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ud14c\uc774\ube14\uc744 \ud45c\ud604\ud55c\ub2e4<\/li>\n<li>DAO : \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc811\uc18d\ud558\uae30 \uc704\ud55c \uba54\uc18c\ub4dc\ub97c \ud3ec\ud568\ud55c\ub2e4.<\/li>\n<\/ul>\n<p>\uc704\uc758 \uad6c\uc131\uc694\uc18c\uc640 \ub2e4\ub978 \uc571\ub4e4\uacfc\uc758 \uad00\uacc4\ub294 \uc544\ub798\uc758 \uadf8\ub9bc\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<img decoding=\"async\" class=\"confluence-embedded-image\" style=\"cursor: move; max-width: calc(100% - 4px); margin-left: 2px; margin-right: 2px; vertical-align: text-bottom;\" title=\"Group UGC \uc140 &gt; 4. Room &gt; image.png\" src=\"http:\/\/wiki.navercorp.com\/download\/attachments\/387475051\/image.png?version=3&amp;modificationDate=1529388044491&amp;api=v2\" data-image-src=\"\/download\/attachments\/387475051\/image.png?version=3&amp;modificationDate=1529388044491&amp;api=v2\" data-unresolved-comment-count=\"0\" data-linked-resource-id=\"387478116\" data-linked-resource-version=\"3\" data-linked-resource-type=\"attachment\" data-linked-resource-default-alias=\"image.png\" data-base-url=\"http:\/\/wiki.navercorp.com\" data-linked-resource-content-type=\"image\/png\" data-linked-resource-container-id=\"387475051\" data-linked-resource-container-version=\"5\" data-location=\"Group UGC \uc140 &gt; 4. Room &gt; image.png\" data-image-height=\"542\" data-image-width=\"600\" \/><br \/>\n\ud558\ub098\uc758 \uc5d4\ud2f0\ud2f0\uc640 \ud558\ub098\uc758 DAO\ub97c \uac16\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud658\uacbd\uc124\uc815\uc5d0 \ub300\ud55c \uc0d8\ud50c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br \/>\n<strong>User.java<\/strong><\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"bf27e523-7ff6-4a89-b897-7618d00bd439\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity\npublic class User {\n    @PrimaryKey\n    private int uid;\n    @ColumnInfo(name = \"first_name\")\n    private String firstName;\n    @ColumnInfo(name = \"last_name\")\n    private String lastName;\n    \/\/ \uc911\uc694: getter\uc640 setter\ub294 \uac04\ub7b5\ud558\uac8c \uc791\uc131\ud558\uae30 \uc704\ud574 \uc5ec\uae30\uc11c\ub294 \uc0dd\ub7b5\ub418\uc5c8\uc9c0\ub9cc Room\uacfc \ud568\uaed8 \uc4f0\uc774\uae30 \uc704\ud574\uc11c\ub294 \ubc18\ub4dc\uc2dc \ud3ec\ud568\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4.\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>UserDao.java<\/strong><\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"df9fc265-e180-433b-b509-4f685a1defe0\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface UserDao {\n    @Query(\"SELECT * FROM user\")\n    List&lt;User&gt; getAll();\n    @Query(\"SELECT * FROM user WHERE uid IN (:userIds)\")\n    List&lt;User&gt; loadAllByIds(int[] userIds);\n    @Query(\"SELECT * FROM user WHERE first_name LIKE :first AND \"\n           + \"last_name LIKE :last LIMIT 1\")\n    User findByName(String first, String last);\n    @Insert\n    void insertAll(User... users);\n    @Delete\n    void delete(User user);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>AppDatabase.java<\/strong><\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"9fa4d6da-51c9-45e0-b839-14f8d98a674a\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"\">@Database(entities = {User.class}, version = 1)\npublic abstract class AppDatabase extends RoomDatabase {\n    public abstract UserDao userDao();\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc704\uc640 \uac19\uc740 \ud074\ub798\uc2a4 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \ub09c\ub4a4\uc5d0 \uc544\ub798\uc758 \ucf54\ub4dc\ub97c \ud1b5\ud574 \ub370\uc774\ud130 \ubca0\uc774\uc2a4\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"fea3f4fb-9234-4863-8ef3-117a28f4d7b0\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">AppDatabase db = Room.databaseBuilder(getApplicationContext(),\n        AppDatabase.class, \"database-name\").build();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"wrapped confluenceTable\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Note : RoomDatabase\uac1d\uccb4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654 \ud558\ub294 \ube44\uc6a9\uc740 \ub9e4\uc6b0 \ud06c\ubbc0\ub85c \uac1c\ubc1c\uc790\ub294 \uc774 AppDatabase\uac1d\uccb4\ub97c \uc5bb\ub294 \uc791\uc5c5\uc744 \uc2f1\uae00\ud1a4\ud328\ud134\uc73c\ub85c \ub9cc\ub4e4\uae30\ub97c \uad8c\uc7a5\ud569\ub2c8\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Room Entity\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130 \uad6c\uc870 \uc815\uc758\ud558\uae30<\/h2>\n<p>Room \uc0ac\uc6a9\uc2dc Entity\ub97c \uc0ac\uc804\uc5d0 \uc815\uc758\ud574\uc57c\ud558\ub294\ub370, \uac01\uac00\uc758 \uc5d4\ud2f0\ud2f0 \ubcc4\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\ub294 \ud14c\uc774\ube14\uc774 \uc0dd\uc131\ub418\uc5b4 \uc544\uc774\ud15c\ub4e4\uc744 \ubcf4\uad00\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.<br \/>\n\uae30\ubcf8\uc801\uc73c\ub85c Room\uc740 Entity\uc5d0 \uc815\uc758\ub41c \ud544\ub4dc\uc5d0\ub9de\ucdb0 \uceec\ub7fc\uc744 \uad6c\uc131\ud558\uac8c \ub429\ub2c8\ub2e4. \ub9cc\uc57d Entity\ub97c \uc704\ud574 \uc791\uc131\ub41c Data \ud074\ub798\uc2a4\uc5d0\uc11c \uc5b4\ub5a0\ud55c \ubcc0\uc218\ub97c \uc120\uc5b8\ud588\uace0 \uc774\uac83\uc774 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uceec\ub7fc\uc73c\ub85c \uc0dd\uc131\ub418\uae30\ub97c \uc6d0\uce58 \uc54a\ub294\ub2e4\uba74\u00a0@Ignore \uc560\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<br \/>\n\uc0d8\ud50c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"5a1b08bd-3116-41b3-a7aa-3e67f47f086b\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity\npublic class User {\n    @PrimaryKey\n    public int id;\n    public String firstName;\n    public String lastName;\n    @Ignore\n    Bitmap picture;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Room\uc774 \ud544\ub4dc\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud574\uc11c \ubc18\ub4dc\uc2dc public \ub610\ub294 getter setter\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub9cc\uc57d getter, setter \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uba74 \uba85\uc2ec\ud574\uc57c\ud560 \uac83\uc774 \ud558\ub098 \uc788\uc2b5\ub2c8\ub2e4. getter setter\ub294 JavaBeans\ucee8\ubca4\uc158\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4.<\/p>\n<table class=\"wrapped confluenceTable\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Note:Entity\ub4e4\uc740 \ube48 \uc0dd\uc131\uc790(\ud574\ub2f9 DAO \ud074\ub798\uc2a4\uac00 \uac01 \ud544\ub4dc\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\ub294\uacbd\uc6b0) \ub610\ub294 \ub9e4\uac1c\ubcc0\uc218\uac00 \uc5d4\ud2f0\ud2f0\uc758 \ud544\ub4dc\uc640 \uc720\ud615 \ubc0f \uc774\ub984\uc774 \uc77c\uce58\ud558\ub294 \uc0dd\uc131\uc790\ub97c \ud3ec\ud568 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Room\uc740 \ub610\ud55c \uc804\uccb4 \ub610\ub294 \uba87\uba87 \ud544\ub4dc\ub9cc\uc744 \ub9e4\uac1c\ubcc0\uc218\ub85c \ubc1b\ub294 \uc0dd\uc131\uc790\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\uae30\ubcf8\ud0a4 \uc0ac\uc6a9\ud558\uae30<\/h2>\n<p>\uac01 \uc5d4\ud2f0\ud2f0\ub294 \ubc18\ub4dc\uc2dc \ud55c\uac1c\uc758 \ud544\ub4dc\ub97c \uae30\ubcf8\ud0a4\ub85c \uc815\uc758 \ud574\uc57c\ud569\ub2c8\ub2e4. \uc2ec\uc9c0\uc5b4 \ud544\ub4dc\uac00 \ud55c\uac1c\ubc16\uc5d0 \uc5c6\ub354\ub77c\ub3c4 \ubc18\ub4dc\uc2dc\u00a0@PrimaryKey \uc560\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc5ec\uc11c \uae30\ubcf8\ud0a4\ub85c \uc815\uc758\ub97c \ud574\uc57c \ud569\ub2c8\ub2e4. \ub610\ud55c \ub9cc\uc57d\uc5d0 ID\uc640 \uac19\uc740 \uae30\ubcf8\ud0a4\uac12\uc744 \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ud558\uace0 \uc2f6\ub2e4\uba74, \uc608\ub97c \ub4e4\uba74 Auto Increment\uac19\uc740.., @PrimaryKey\uc758 \uc18d\uc131\uac12\uc73c\ub85c\u00a0autoGenerate\ub97c true\ub85c \uc9c0\uc815\ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4.<br \/>\n\ucf54\ub4dc\ub97c \ubcf4\ub3c4\ub85d\ud558\uc8e0.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"c5558e3a-4009-4a4a-a16b-7428bdb37f12\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(primaryKeys = {\"firstName\", \"lastName\"})\npublic class User {\n    public String firstName;\n    public String lastName;\n    @Ignore\n    Bitmap picture;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uae30\ubcf8\uc801\uc73c\ub85c Room\uc740 \ud074\ub798\uc2a4\uc774\ub984\uc744 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ud14c\uc774\ube14\uba85\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uadfc\ub370 \ub9cc\uc57d\uc5d0 \ub2e4\ub978 \uc774\ub984\uc744 \uc4f0\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798\uc640 \uac19\uc774 tableName\uc18d\uc131\uc744 \uc9c0\uc815\ud558\uba74\ub429\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"50d2e6a5-564d-4d92-af92-46dbf78a39ad\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(tableName = \"users\")\npublic class User {\n    ...\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"wrapped confluenceTable\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Caution:SQLite\uc5d0\uc11c\ub294 \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>tableName\uacfc \ube44\uc2b7\ud558\uac8c, Room \uc740 \ud544\ub4dc\uba85 \ub610\ud55c \ub2e4\ub974\uac8c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0@ColumnInfo \uc560\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud574\uc11c \ub9d0\uc774\uc8e0. \uc544\ub798\uc640 \uac19\uc774 \uc0ac\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"d7a28052-eb9d-4205-ad10-241a9b42ee48\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(tableName = \"users\")\npublic class User {\n    @PrimaryKey\n    public int id;\n    @ColumnInfo(name = \"first_name\")\n    public String firstName;\n    @ColumnInfo(name = \"last_name\")\n    public String lastName;\n    @Ignore\n    Bitmap picture;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\uc778\ub371\uc2a4\uc640 \uace0\uc720\uc131\uc5d0 \ub300\ud574 \uc8fc\uc11d\ub2ec\uae30(Annotate indices and uniqueness)<\/h2>\n<p>\uc5b4\ub5bb\uac8c data\uc5d0 \uc811\uadfc\ud558\ub0d0\uc5d0 \ub530\ub77c, \ucffc\ub9ac\uc758 \uc18d\ub3c4\ub97c \ub192\uc774\uae30 \uc704\ud574 \uc5b4\ub5a4\ud544\ub4dc\ub97c \uc778\ub371\uc2a4\ud558\uace0 \uc2f6\uc744\uc9c0\ub3c4 \ubaa8\ub978\ub2e4. @Entity\uc560\ub178\ud14c\uc774\uc158\uc758 \uc18d\uc131\uc73c\ub85c\u00a0indices\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uba74 \uc5d4\ud2f0\ud2f0\ub97c \uc778\ub371\uc2a4 \ud560 \uc218 \uc788\ub2e4. column\uc774\ub984\uc758 \ubaa9\ub85d\uc744 \uc801\uae30\ub9cc \ud558\uba74\ub41c\ub2e4. \uc0d8\ud50c \ucf54\ub4dc\ub97c \ud655\uc778\ud574\ubcf4\uc790<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"17e308a9-9ef3-46a2-98e1-89ae1f2e4881\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(indices = {@Index(\"firstName\"),\n        @Index(value = {\"last_name\", \"address\"})})\npublic class User {\n    @PrimaryKey\n    public int id;\n    public String firstName;\n    public String address;\n    @ColumnInfo(name = \"last_name\")\n    public String lastName;\n    @Ignore\n    Bitmap picture;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ub54c\ub85c\ub294 \uc5b4\ub5a4 \ud544\ub4dc\ub098 \ud544\ub4dc\uc758 \uadf8\ub8f9\uc744 \uace0\uc720\ud558\uac8c \ub9cc\ub4e4\uc5b4\uc57c \ud560 \ub54c\uac00 \uc788\ub2e4. \uac15\uc81c\ub85c \uace0\uc720\uc131\uc744 \ubd80\uc5ec\ud560\uc218\ub3c4 \uc788\ub294\ub370 \ubc14\ub85c unique \uc18d\uc131\uc774\ub2e4. \uc778\ub371\uc2a4 \uc560\ub178\ud14c\uc774\uc158\uacfc \uac19\uc774 \uc4f0\uc774\uba70 true\ub85c \uc9c0\uc815\ud558\uae30\ub9cc \ud558\uba74\ub41c\ub2e4. \ub2e4\uc74c \uc544\ub798\uc5d0 \ub098\uc624\ub294 \ucf54\ub4dc\uc5d0\uc11c\ub294 firstName\uacfc lastName\uceec\ub7fc\uc5d0 \ub300\ud558\uc5ec \ud14c\uc774\ube14\uc774 \ub450\uac1c \uc774\uc0c1\uc758 \uac19\uc740 \ud589\uc774 \uae30\ub85d\ub418\uc9c0 \uc54a\ub3c4\ub85d \ubc29\uc9c0 \ud558\uace0 \uc788\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"43a785dd-c86d-46f2-9d01-9f90965ae7b5\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(indices = {@Index(value = {\"first_name\", \"last_name\"},\n        unique = true)})\npublic class User {\n    @PrimaryKey\n    public int id;\n    @ColumnInfo(name = \"first_name\")\n    public String firstName;\n    @ColumnInfo(name = \"last_name\")\n    public String lastName;\n    @Ignore\n    Bitmap picture;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\uac1d\uccb4\uac04\uc758 \uad00\uacc4 \uc815\uc758 \ud558\uae30<\/h2>\n<p>SQLite\ub294 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc774\uae30 \ub54c\ubb38\uc5d0 \uac1d\uccb4\uac04\uc758 \uad00\uacc4\ub3c4 \uc9c0\uc815\uac00\ub2a5\ud558\ub2e4. \ube44\ub85d \ub300\ubd80\ubd84\uc758 \uad00\uacc4\ud615 \uc624\ube0c\uc7ad\ud2b8 \ub9e4\ud551 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc740 \uc5d4\ud2f0\ud2f0\uac00 \ub2e4\ub978 \uac83\ub4e4\uc744 \ucc38\uc870\ud558\ub3c4\ub85d \ud558\uc9c0\ub9cc Room \ubd84\uba85\ud558\uac8c \uc774\uac83\uc744 \uae08\uc9c0\ud558\uace0 \uc788\ub2e4.<br \/>\n\uc774\uc5d0 \ub300\ud55c \uc774\uc720\ub97c \uc54c\uace0 \uc2f6\ub2e4\uba74 <a href=\"https:\/\/developer.android.com\/training\/data-storage\/room\/referencing-data.html#understand-no-object-references\">\ub9c1\ud06c<\/a>\ub97c \ucc38\uc870\ud558\ub3c4\ub85d \ud558\uc790.<br \/>\n\ube44\ub85d \uc9c1\uc811\uc801\uc73c\ub85c \uad00\uacc4\ub97c \ub9fa\uc744\uc218\ub294 \uc5c6\uc9c0\ub9cc, Room\uc740 \uc5ec\uc804\ud788 \uc5d4\ud2f0\ud2f0\uac04\uc5d0 \uc678\ubd80\ud0a4\ub97c \uc815\uc758\ud558\ub294\uac83\uc744 \ud5c8\uc6a9\ud558\uace0 \uc788\ub2e4.<br \/>\n\uc608\ub97c\ub4e4\uba74 Book\uc774\ub77c\ub294 \uc5d4\ud2f0\ud2f0\uac00 \uc788\uace0 User\ub77c\ub294 \uc5d4\ud2f0\ud2f0\uc640 \uad00\uacc4\ub97c \ub9fa\uace0 \uc2f6\ub2e4\uba74\u00a0@ForeignKey \uc560\ub178\ud14c\uc774\uc158\uc744 \ud1b5\ud574 \uc544\ub798\uc640\uac19\uc774 \uc815\uc758 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"abf16c6b-b8dc-4d80-858c-4fcc7e528e19\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Entity(foreignKeys = @ForeignKey(entity = User.class,\n                                  parentColumns = \"id\",\n                                  childColumns = \"user_id\"))\npublic class Book {\n    @PrimaryKey\n    public int bookId;\n    public String title;\n    @ColumnInfo(name = \"user_id\")\n    public int userId;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc678\ubd80\ud0a4\ub294 \ub9e4\uc6b0 \uac15\ub825\ud558\ub2e4. \ucc38\uc870\ud55c \uc5d4\ud2f0\ud2f0\uac00 \uc5c5\ub370\uc774\ud2b8 \ub420\ub54c \uc5b4\ub5a4\uc77c\uc774 \ubc1c\uc0dd\ud588\ub294\uc9c0 \uba85\uc2dc\ud558\ub294\uac83\uc744 \ud5c8\uc6a9\ud558\uace0 \uc788\ub2e4.<br \/>\n\uc608\ub97c\ub4e4\uba74\u00a0@ForeignKey(onDelete=CASCADE) \uc560\ub178\ud14c\uc774\uc158\uc744 \uac00\uc9c0\uace0 \uc788\ub294 \uc5b4\ub5a4 User\uac1d\uccb4\uac00 \uc0ad\uc81c\ub41c\ub2e4\uba74 \ubaa8\ub4e0 \ud574\ub2f9 \uc720\uc838\uc758 \ubaa8\ub4e0 \ucc45\uc744 \uc0ad\uc81c\ud574\ub77c \ub77c\ub294 \uba85\ub839\uc744 SQLite\uc5d0\uac8c \uc904\uc218\ub3c4 \uc788\ub2e4.<\/p>\n<table class=\"wrapped confluenceTable\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Note:SQLite\ub294 @Insert(onConflict = REPLACE)\ub97c \ud558\ub098\uc758 UPDATE \uc5f0\uc0b0\uc790 \ub300\uc2e0\uc5d0 REMOVE \uc640 REPLACE \uc5f0\uc0b0\uc790\ub4e4\uc758 \ubb36\uc74c\uc73c\ub85c \ub2e4\ub8ec\ub2e4. \uc911\ubcf5\uad50\uccb4\ub97c \ud558\ub294 \uc774 \uba54\uc18c\ub4dc\ub294 \uc678\ubd80\ud0a4 \uc81c\uc57d\uc0ac\ud56d\uc5d0 \uc601\ud5a5\uc744 \ucd9c\uc218\ub3c4 \uc788\ub2e4. \uc790\uc138\ud55c \uc0ac\ud56d\uc740 <a href=\"https:\/\/sqlite.org\/lang_conflict.html\">SQLite Documentation<\/a>\uc758 ON_CONFLICT \ud56d\ubaa9\uc744 \ud655\uc778\ud558\ub3c4\ub85d \ud558\uc790.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\ub610 \ub2e4\ub978 \uc5d4\ud2f0\ud2f0\ub97c \ub0b4\ud3ec\ud558\ub294 \uc624\ube0c\uc81d\ud2b8 \ub9cc\ub4e4\uae30(Create nested objects)<\/h2>\n<p>\ub54c\ub85c\ub294 \uc5ec\ub7ec \ud544\ub4dc\ub97c \ud3ec\ud568\ud558\uace0 \uc788\ub294 \uc5b4\ub5a0\ud55c \uac1d\uccb4\ub97c POJO\ub098 Entity\ub97c \ud1b5\ud574 \ud45c\ud604\ud558\uace0 \uc2f6\uc744\ub54c\uac00 \uc788\ub2e4. \uc774\ub7f0\uacbd\uc6b0\uc5d0\ub294\u00a0@Embeded \uc560\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud14c\uc774\ube14 \ub0b4\uc758 \ud558\uc704 \ud544\ub4dc\ub85c \ubd84\ud574 \ud560 \uac1d\uccb4\ub97c \ub098\ud0c0\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \ub2e4\ub978 \uac01\uac00\uc758 \uceec\ub7fc\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c \ud3ec\ud568\ub41c \ud544\ub4dc\ub97c \ucffc\ub9ac \ud560 \uc218 \uc788\ub2e4. \u00a0\ub9d0\uc774 \uc5b4\ub824\uc6b4\ub370 \uadf8\ub0e5 \uc608\uc81c\ub97c \ubcf4\ub294\ud3b8\uc774 \ub354 \uc26c\uc6b8\ub54c\ub3c4 \uc788\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"a3c6ae33-a702-44d7-9a97-6cbe544f5366\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">public class Address {\n    public String street;\n    public String state;\n    public String city;\n    @ColumnInfo(name = \"post_code\")\n    public int postCode;\n}\n@Entity\npublic class User {\n    @PrimaryKey\n    public int id;\n    public String firstName;\n    @Embedded\n    public Address address;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uacb0\uacfc\uc801\uc73c\ub85c User \ud14c\uc774\ube14\uc740 id, firstName, street, state, city, post_code\ub97c \ub2e4 \ud3ec\ud568\ud558\uc5ec\uc11c \ud45c\ud604\ud55c\ub2e4.<\/p>\n<table class=\"wrapped confluenceTable\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Note:Embeded \ud544\ub4dc\ub294 \ub610 \ub2e4\ub978 Embeded\ud544\ub4dc\ub97c \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ub9cc\uc57d \uc5d4\ud2f0\ud2f0\uac00 \uac19\uc740\uc790\ub8cc\ud615\uc758 \uc5ec\ub7ec \uc784\ubca0\ub514\ub4dc \ud544\ub4dc\ub97c \uac16\ub294\ub2e4\uba74, prefix\uc18d\uc131\uc744 \ud1b5\ud574 \uac01 \uceec\ub7fc\uc774 \uace0\uc720\ud558\ub3c4\ub85d \ud560 \uc218 \uc788\ub2e4.\u00a0\uadf8\ub7f0 \ub2e4\uc74c \uc81c\uacf5\ub41c \uac12\uc744 \ud3ec\ud568 \ub41c \uac1c\uccb4\uc758 \uac01 \uceec\ub7fc \uc774\ub984 \uc2dc\uc791 \ubd80\ubd84\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<h2>Room\uc758 DAO\ub4e4\uc744 \uc774\uc6a9\ud558\uc5ec data\uc5d0 \uc811\uadfc\ud558\uae30<\/h2>\n<p>Room\uc744 \ud1b5\ud574 database\uc5d0 \uc788\ub294 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \u00a0\uc811\uadfc\ud558\ub824\uba74 DAO\uac00 \ud544\uc694\ud558\ub2e4. DAO\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ucd94\uc0c1\uc801\uc778 \uc811\uadfc\uc744 \uc81c\uacf5\ud558\ub294 \uba54\uc18c\ub4dc\ub4e4\uc744 \ud3ec\ud568\ud55c\ub2e4.<br \/>\n\uc9c8\uc758\ub97c \ub9cc\ub4dc\ub294 \ube4c\ub354\ub098 \uc9c1\uc811\uc801\uc778 \ucffc\ub9ac\ub97c \uc791\uc131\ud558\ub294 \uac83 \ub300\uc2e0, DAO\ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc811\uadfc\ud558\ub294\uac83\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uad6c\uc870\uc758 \uad6c\uc131\uc694\uc18c\ub97c \ubd84\ub9ac \ud55c\ub2e4. \ub354\ub098\uc544\uac00 DAO\ub294 \uc27d\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ubaa8\ud0b9(Mock)\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc27d\uac8c \ud55c\ub2e4.<br \/>\n\ud558\ub098\uc758 DAO\ub294 interface\ub098 abstract class\uac00 \ub418\uc57c \ud55c\ub2e4. \ub9cc\uc57d abstract class\ub85c \ub9cc\ub4e4\uc5c8\ub530\uba74 \uc120\ud0dd\uc801\uc73c\ub85c RoomDatabase\uac1d\uccb4\ub97c \uc0dd\uc131\uc790\uc758 \ub9e4\uac1c\ubcc0\uc218\ub85c \uac00\uc9c8\uc218 \uc788\uc73c\uba70. Room \uc740 \uac01 DAO\uc758 \uad6c\ud604\uc744 \ucef4\ud30c\uc77c \uc2dc\uac04\uc5d0 \uc0dd\uc131\ud574\ub0b8\ub2e4.<\/p>\n<table class=\"confluenceTable wrapped\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Note:Room\uc740 \uba54\uc778\uc4f0\ub808\ub4dc\uc5d0\uc11c\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc811\uadfc\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\ub294\ub2e4. \ud5c8\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \ube4c\ub354\uc5d0\uc11c allowMainThreadQueries()\ub97c \ud638\ucd9c\ud574\uc57c\ud55c\ub2e4. \ud5c8\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\uc720\ub294 \ub370\uc774\ud130\ub97c \ubc1b\uc544\uc624\ub294 \uc791\uc5c5\uc774 \uae38\uc5b4\uc9c8 \uacbd\uc6b0 UI\uac00 \uc7a5\uc2dc\uac04 \uba48\ucdb0\ubc84\ub9b4\uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uadf8\ub798\uc11c \ubcf4\ud1b5 \ube44\ub3d9\uae30 \ucffc\ub9ac\ub97c \ud558\uac8c \ub418\ub294\ub370 \ubc18\ud658\uac12\uc73c\ub85c\ub294 LiveData \ub610\ub294 RxJava\uc758 Flowable\uc774 \ub420 \uc218\ub3c4 \uc788\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\ud3b8\uc758\uc131\uc744 \uc704\ud55c \uba54\uc18c\ub4dc \uc815\uc758\ud558\uae30<\/h2>\n<p>DAO\ub97c \uc774\uc6a9\ud55c \uc5ec\ub7ec \ud3b8\ub9ac\ud55c \ucffc\ub9ac\ub4e4\uc774 \uc788\ub294\ub370 \uba87\uba87 \uac00\uc9c0 \uc608\ub9cc \ub2e4\ub8e8\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\ub2e4.<\/p>\n<h3>Insert<\/h3>\n<p>DAO\uba54\uc18c\ub4dc\ub97c \ub9cc\ub4e4\ub54c\u00a0@Insert\ub97c \ub2ec\uc544\uc904\uc218 \uc788\ub2e4. Room\uc740 \uc774\uc640 \uad00\ub828\ub41c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud574\ub0b4\uace0 \ubaa8\ub4e0 \ud30c\ub77c\ubbf8\ud130\ub97c \ud558\ub098\uc758 \ud2b8\ub79c\uc7ad\uc158\ub0b4\uc5d0\uc11c \uc0bd\uc785(insert)\ud558\uac8c \ub41c\ub2e4.<br \/>\n\ucf54\ub4dc\ub97c \ud655\uc778\ud574\ubcf4\uc790<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"be5c6b48-6c49-4758-ac32-59ffa0141aa5\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Insert(onConflict = OnConflictStrategy.REPLACE)\n    public void insertUsers(User... users);\n    @Insert\n    public void insertBothUsers(User user1, User user2);\n    @Insert\n    public void insertUsersAndFriends(User user, List&lt;User&gt; friends);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ub9cc\uc57d\u00a0@Insert \uba54\uc18c\ub4dc\uac00 \ud558\ub098\uc758 \ud30c\ub77c\ubbf8\ud130\ub9cc \ubc1b\ub294\ub2e4\uba74, \uc0bd\uc785\ud55c \ub370\uc774\ud130\uc5d0 \ub300\ud55c long\ud615\u00a0rowId\ub97c \ub9ac\ud134 \ubc1b\uc744 \uc218 \uc788\ub2e4. \ub9cc\uc57d \ud30c\ub77c\ubbf8\ud130\uac00 \uc5ec\ub7ec\uac1c\ub77c\uba74 long[] \ub610\ub294 List&lt;Long&gt;\uc73c\ub85c \ub300\uc2e0 \ub9ac\ud134 \ubc1b\uc744 \uc218 \uc788\ub2e4.<\/p>\n<h3>Update<\/h3>\n<p>Update\ub97c \ud1b5\ud574 \uc8fc\uc5b4\uc9c4 \ud30c\ub77c\ubbf8\ud130\ub85c\ubd80\ud130 \uc5ec\ub7ec \uc5d4\ud2f0\ud2f0\ub4e4\uc744 \uc218\uc815\ud560 \uc218 \uc788\ub2e4. \uc774\ub294 \uac01 \uc5d4\ud2f0\ud2f0\uc758 \uae30\ubcf8\ud0a4\uc5d0 \ub300\ud574 \uc77c\uce58\ud558\ub294 \uacbd\uc6b0 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"9e306c93-0505-4dbf-9749-0fb777d80297\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Update\n    public void updateUsers(User... users);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ubcf4\ud1b5 \ud544\uc694\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \uc774 \uba54\uc18c\ub4dc\uc758 \ub300\ud55c \ubc18\ud658\ud615\uc740 Int\uc778\ub370, \ubc18\ud658\uac12\uc740 \uc218\uc815\ub41c \ud589\uc758 \uac2f\uc218\ub97c \uc54c\ub824\uc900\ub2e4.<\/p>\n<h3>Delete<\/h3>\n<p>\uc8fc\uc5b4\uc9c4 \ud30c\ub77c\ubbf8\ud130\ub85c \ubd80\ud130 \uc5d4\ud2f0\ud2f0\ub4e4\uc744 \uc9c0\uc6cc\uc8fc\ub294 \uba54\uc18c\ub4dc. \uc5d4\ud2f0\ud2f0\ub97c \ucc3e\uc544 \uc0ad\uc81c\ud558\uae30 \uc704\ud574\uc11c \uae30\ubcf8\ud0a4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"cd9ca2c3-f78a-452d-a642-5e356149f433\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Delete\n    public void deleteUsers(User... users);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc774 \uba54\uc18c\ub4dc \ub610\ud55c \uba87\uac1c\uc758 \ud589\uc774 \uc9c0\uc6cc\uc84c\ub294\uc9c0 int\ud615 \ubc18\ud658\uac12\uc73c\ub85c \uc54c\ub824\uc900\ub2e4.<\/p>\n<h2>Query\ud574\ubcf4\uae30<\/h2>\n<p>@Query \ub294 DAO \uc5d0\uc11c \uc8fc\uc694\ud55c \uc560\ub178\ud14c\uc774\uc158\uc774\ub2e4. \uc77d\uae30\/\uc4f0\uae30\ub97c \uc774 \uc560\ub178\ud14c\uc774\uc158\uc73c\ub85c \ubaa8\ub450 \uac00\ub2a5\ud558\ub2e4. \uac01\u00a0@Query \uba54\uc18c\ub4dc\ub294 \ucef4\ud30c\uc77c \uc2dc\uac04\uc5d0 \uc54c\ub9de\uc740 \ucffc\ub9ac \uc778\uc9c0 \uc785\uc99d\ud558\uac8c \ub418\uace0 \ubb38\uc81c\uac00 \uc788\uc744\uc2dc\uc5d0\ub294 \ucef4\ud30c\uc77c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<br \/>\nRoom\uc740 \ub610\ud55c \ucffc\ub9ac\uc5d0 \ub300\ud55c \ubc18\ud658\uac12\uc744 \ud655\uc778\ud55c\ub2e4. \ubc18\ud658\ub418\ub294 \uac1d\uccb4\uc758 \ud544\ub4dc\uc758 \uc774\ub984\uc774 \ub9cc\uc57d\uc5d0 \ub300\uc751\ub418\ub294 \uceec\ub7fc\uc774\ub984\uc774 \uc9c8\uc758\uc751\ub2f5\uc5d0\uc11c \uc77c\uce58\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 Room\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \ub450\uac00\uc9c0 \ubc29\ubc95\uc911 \ud558\ub098\ub85c \uc54c\ub9bc\uc744 \uc904\uac83\uc774\ub2e4.<\/p>\n<ul style=\"list-style-type: square;\">\n<li>\uba87\uba87\uc758 \ud544\ub4dc\uba85\ub9cc \uc77c\uce58\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \uacbd\uace0 \ubc1c\uc0dd<\/li>\n<li>\uc77c\uce58\ud558\uc9c0 \uc54a\ub294 \ud544\ub4dc\uba85\uc774 \uc788\uc744\uc2dc \uc5d0\ub7ec \ubc1c\uc0dd<\/li>\n<\/ul>\n<h3>\uac04\ub2e8\ud55c \ucffc\ub9ac<\/h3>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"aca63cd6-f4b3-45d3-be95-486573762c33\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * FROM user\")\n    public User[] loadAllUsers();\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ub9e4\uc6b0 \uac04\ub2e8\ud55c \ucffc\ub9ac\ub85c \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uc744 \ubd88\ub7ec \uc62c\uc218 \uc788\ub2e4. \ucef4\ud30c\uc77c\uc2dc\uac04\uc5d0 Room\uc740 User\ud14c\uc774\ube14\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \uceec\ub7fc\uc744 \ucffc\ub9ac\ud558\ub294 \uac83\uc744 \uc54c\uac8c \ub41c\ub2e4. \ucffc\ub9ac\uac00 \ubb38\ubc95 \uc624\ub958\ub97c \ud3ec\ud568\ud558\uace0 \uc788\uac70\ub098 user \ud14c\uc774\ube14\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 Room\uc740 \uc801\ub2f9\ud55c \uc5d0\ub7ec\uba54\uc2dc\uc9c0\ub97c \ucef4\ud30c\uc77c \uc2dc\uac04\uc5d0 \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/p>\n<h3>\ucffc\ub9ac\uc5d0 \ud30c\ub77c\ubbf8\ud130 \ub118\uae30\uae30<\/h3>\n<p>\ub300\ubd80\ubd84\uc758 \uacbd\uc6b0 \ucffc\ub9ac\uc5d0 \ud30c\ub77c\ubbf8\ud130\ub97c \ub118\uaca8 filter\ub97c \ud558\uace0 \uc2f6\uc744\ub54c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uba74 \uc0ac\uc6a9\uc790\ub97c \ucffc\ub9ac \ud558\ub294\ub370 \ud2b9\uc815 \uc22b\uc790\ubcf4\ub2e4 \ub098\uc774\uac00 \ub9ce\uc740 \uc0ac\ub78c\uc744 \ud45c\ud604\ud55c\ub2e4\uac70\ub098 \ud560\ub54c \ub9d0\uc774\uc8e0. \uc774\ub7ec\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba54\uc18c\ub4dc\uc5d0 \uc778\uc790\uac12\uc744 \uc560\ub178\ud14c\uc774\uc158\uc5d0\uc11c \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"32187901-116a-4e1a-89e6-9d849d4c3f74\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * FROM user WHERE age &gt; :minAge\")\n    public User[] loadAllUsersOlderThan(int minAge);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ucffc\ub9ac\uac00 \ucef4\ud30c\uc77c \uc2dc\uac04\uc774 \ucc98\ub9ac\ub420\ub54c, Room\uc740 \ubc14\uc778\ub4dc \uc778\uc790\uac12\uc778 :minAge\ub97c \uba54\uc18c\ub4dc\uc758 \ub9e4\uac1c\ubcc0\uc218\uc778 minAge\uc640 \uc77c\uce58 \uc2dc\ud0b5\ub2c8\ub2e4.<br \/>\n\ub9cc\uc57d \uc77c\uce58 \ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \ucef4\ud30c\uc77c \uc2dc\uac04\uc5d0 \uc5d0\ub7ec\ub97c \ubc1c\uc0dd\uc2dc\ud0b5\ub2c8\ub2e4.<br \/>\n\ubcf5\uc218\uac1c\uc758 \ud30c\ub77c\ubbf8\ud130\ub97c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"24f16b3a-330b-447f-9627-2c5d0282e445\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * FROM user WHERE age BETWEEN :minAge AND :maxAge\")\n    public User[] loadAllUsersBetweenAges(int minAge, int maxAge);\n    @Query(\"SELECT * FROM user WHERE first_name LIKE :search \"\n           + \"OR last_name LIKE :search\")\n    public List&lt;User&gt; findUserWithName(String search);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\uceec\ub7fc\uc758 \ubd80\ubd84\uc9d1\ud569 \ubc18\ud658\ud558\uae30<\/h3>\n<p>\uac1c\ubc1c\uc790\ub294 \ub300\ubd80\ubd84 \uba87\uba87 \ud544\ub4dc\ub9cc \uc5d4\ud2f0\ud2f0\ub85c \ubd80\ud130 \uc5bb\uc73c\ub824\uace0 \ud560\uac81\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uba74 \uc0ac\uc6a9\uc790\uc758 \ubaa8\ub4e0\uc815\ubcf4\ub97c \ub2e4 \ubcf4\uc5ec\uc8fc\uae30\ubcf4\ub2e4\ub294 \uc131\uc774\ub098 \uc774\ub984\uac19\uc740 \uc815\ubcf4\ub9cc \ub9d0\uc774\uc8e0. \uc571\ub0b4\uc758 UI\uc5d0\uc11c \uba87\uba87\uc758 \uceec\ub7fc\ub9cc \uac00\uc838\uc624\ub294 \uac83\ub9cc\uc73c\ub85c \ub9ac\uc18c\uc2a4\uc0ac\uc6a9\uc744 \uc904\uc77c\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ucffc\ub9ac \ud558\ub294 \uc2dc\uac04\ub3c4 \ub2e8\ucd95\ub418\uaca0\uc8e0.<br \/>\nRoom\uc740 Query\ud560\ub54c \ubc18\ud658\uac12\uc774 \uceec\ub7fc\ub4e4\uc758 \ubd80\ubd84\uc9d1\ud569\uc778 \uc774\uc0c1 \uc5b4\ub5a0\ud55c \uc790\ubc14\uae30\ubc18\uc758 \uc624\ube0c\uc81d\ud2b8\ub3c4 \ub9ac\ud134\ud560 \uc218 \uc788\ub3c4\ub85d \ud5c8\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uba74 POJO\ub97c \ub9cc\ub4e4\uace0 \uc0ac\uc6a9\uc790\uc758 \uc131\uacfc \uc774\ub984\ub9cc \ubc1b\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"8ee7d97b-aecd-4565-86aa-11a080d210e4\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">public class NameTuple {\n    @ColumnInfo(name=\"first_name\")\n    public String firstName;\n    @ColumnInfo(name=\"last_name\")\n    public String lastName;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc704\ucc98\ub7fc POJO\ub97c \ub9cc\ub4e4\uace0, \uc544\ub798\ucc98\ub7fc \ucffc\ub9ac\ub97c \ud569\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"a54db5ab-7fa6-42e0-af78-50fcc0eadc66\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT first_name, last_name FROM user\")\n    public List&lt;NameTuple&gt; loadFullName();\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Room\uc740 @ColumnInfo\uc5d0\u00a0\ud544\ub4dc\uba85\ub9cc \uc801\uc5b4\uc918\ub3c4 \uc54c\uc544\uc11c \ucc99\ucc99 \ub9e4\ud551\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<h3>Collection\uc778\uc790 \ub118\uae30\uae30<\/h3>\n<p>\uba87\uba87 \ucffc\ub9ac\ub4e4\uc740 \ub7f0\ud0c0\uc784\uae4c\uc9c0\ub294 \uc815\ud655\ud55c \ud30c\ub77c\ubbf8\ud130\uac2f\uc218\ub294 \ubaa8\ub974\uc9c0\ub9cc \ub2e4\uc591\ud55c \uac2f\uc218\uc758 \ud30c\ub77c\ubbf8\ud130\ub97c \ud544\uc694\ub85c \ud558\ub294\uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uba74, \ud2b9\uc815\uc9c0\uc5ed\ub4e4\uc758 \ubd80\ubd84\uc9d1\ud569\uc73c\ub85c\ubd80\ud130 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ud544\uc694\ub85c \ud558\ub294 \uacbd\uc6b0\ub97c \uc0dd\uac01\ud574\ubd05\uc2dc\ub2e4. Room\uc740 \ub611\ub611\ud558\uac8c\ub3c4 \ub7f0\ud0c0\uc784\uc2dc\uc5d0 \uc774\ub7ec\ud55c collection\ud30c\ub77c\ubbf8\ud130 \uc0ac\uc774\uc988\uc5d0 \ub9de\ucd94\uc5b4 \ud30c\ub77c\ubbf8\ud130 \uac2f\uc218\ub97c \uc790\ub3d9\uc73c\ub85c \ud655\uc7a5\uc2dc\ud0b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"891dbdb1-8dc0-4bda-b639-8d962c53258f\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT first_name, last_name FROM user WHERE region IN (:regions)\")\n    public List&lt;NameTuple&gt; loadUsersFromRegions(List&lt;String&gt; regions);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Observable \ucffc\ub9ac<\/h3>\n<p>\ucffc\ub9ac\ub97c \uc694\uccad\ud560\ub54c \ubcf4\ud1b5 \ub370\uc774\ud130\uc758 \ubcc0\uacbd\uc5d0 \ub530\ub77c APP\uc758 UI\ub3c4 \uac19\uc774 \uc790\ub3d9\uc73c\ub85c \uac31\uc2e0\ub418\uae38 \uc6d0\ud560\uac81\ub2c8\ub2e4. \uc774\uac83\uc744 \ud558\ub824\uba74 LiveData\ub97c \ub9ac\ud134\uac12\uc73c\ub85c \uac19\ub294 \ucffc\ub9ac\ub97c \uba54\uc18c\ub4dc\uc5d0 \uc815\uc758\ud574\uc918\uc57c \ud569\ub2c8\ub2e4. Room\uc740 database\uac00 \uc5c5\ub370\uc774\ud2b8 \ub428\uc5d0 \ub530\ub77c LiveData\uc758 data\ub3c4 \ubcc0\uacbd\ub420\uc218 \uc788\ub3c4\ub85d \ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"b3720124-f488-4c09-affd-f0d694b5981d\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT first_name, last_name FROM user WHERE region IN (:regions)\")\n    public LiveData&lt;List&lt;User&gt;&gt; loadUsersFromRegionsSync(List&lt;String&gt; regions);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>RxJava\uc640 \ud568\uaed8 \ud558\ub294 \ubc18\uc751\ud615 \ucffc\ub9ac<\/h3>\n<p>Room \uc740 RxJava2\uc758 Publisher\ub098 Flowable \ud0c0\uc785\uc73c\ub85c \ub9ac\ud134\uac12\uc744 \uac00\uc9c8\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\ub4e4\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294\u00a0<strong>android.arch.persistence.room:rxjava2 <\/strong>\uc544\ud2f0\ud329\ud2b8\ub97c Room Group\uc5d0 \uc758\uc874\uc131\uc744 \ucd94\uac00\ud574\uc918\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"79e77e47-eaf3-440e-8606-7a8f0d7d6c1b\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * from user where id = :id LIMIT 1\")\n    public Flowable&lt;User&gt; loadUserById(int id);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Cursor\ub97c \ud1b5\ud55c \uc9c1\uc811\uc801\uc778 \uc811\uadfc<\/h3>\n<p>\ub9cc\uc57d \uc9c1\uc811\uc801\uc778 \uc811\uadfc\uc774 \ud544\uc694\ud558\ub2e4\uba74 Cursor\uac1d\uccb4\ub97c \uc0ac\uc6a9\ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"86b8200d-b696-4212-86dc-ba8ae993a82e\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * FROM user WHERE age &gt; :minAge LIMIT 5\")\n    public Cursor loadRawUsersOlderThan(int minAge);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"confluenceTable wrapped\">\n<colgroup>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<th class=\"confluenceTh\">Caution: Cursor API\ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uc740 \ubcc4\ub85c \ucd94\ucc9c\ud558\uc9c0 \uc54a\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. \ud589\ub4e4\uc774 \uc874\uc7ac\ud558\ub294\uc9c0 \uc5b4\ub5a4\uac12\uc774 \ud589\uc5d0 \ud3ec\ud568\ub41c\uac83\uc778\uc9c0 \ubcf4\uc7a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ubbf8 cursor\uc640 \uad00\ub828\ub41c \ub9cc\ub4e4\uc5b4\uc9c4 \ucf54\ub4dc\uac00 \uc788\uac70\ub098 \ub9ac\ud329\ud1a0\ub9c1\uc774 \ud798\ub4e0 \uacbd\uc6b0\uac00 \uc0ac\uc6a9\ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\ub2e4\uc911 \ud14c\uc774\ube14 \ucffc\ub9ac\ud558\uae30<\/h3>\n<p>\uba87\uba87 \ucffc\ub9ac\ub4e4\uc740 \uc5ec\ub7ec \ud14c\uc774\ube14\ub4e4\uc5d0 \uc811\uadfc\ud558\uc5ec \uacc4\uc0b0\ub41c \uacb0\uacfc\ub97c \ud544\uc694\ub85c \ud55c\ub2e4. Room\uc740 \ud14c\uc774\ube14\uc744 join\ud558\uc5ec \ucffc\ub9ac \uc791\uc131\ud558\ub294\uac83\uc744 \ud5c8\uc6a9\ud558\uace0 \uc788\ub2e4. Flowable\uc774\ub098 LiveData\uac19\uc740 Observable \ub370\uc774\ud130 \ud0c0\uc785\uc73c\ub85c \ubc18\ud658\ub41c\ub2e4\uba74 Room\uc740 \ucffc\ub9ac\uc5d0\uc11c \ubb34\ud6a8\uc131\uc744 \uc704\ud574 \uc5f0\uad00\ub41c \ubaa8\ub4e0 \ud14c\uc774\ube14\uc744 \uac10\uc9c0\ud569\ub2c8\ub2e4.<br \/>\n\ub2e4\uc74c \ubcf4\uc5ec\uc8fc\ub294 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc740 \uc5b4\ub5bb\uac8c \ud14c\uc774\ube14\uc774 join\ud558\uc5ec \ud1b5\ud569\ub418\ub294\uc9c0 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \ub450 \ud14c\uc774\ube14\uc740\u00a0\ucc45\uc744 \ube4c\ub9ac\ub294 \uc0ac\uc6a9\uc790\ub97c \ud3ec\ud568\ud55c \ud14c\uc774\ube14\uacfc \ud604\uc7ac \ub300\ucd9c\uc911\uc778 \ucc45\uc744 \ud3ec\ud568\ud558\ub294 \ud14c\uc774\ube14\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"5f1bca10-a105-42eb-a662-7bf5239d313e\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true\">@Dao\npublic interface MyDao {\n    @Query(\"SELECT * FROM book \"\n           + \"INNER JOIN loan ON loan.book_id = book.id \"\n           + \"INNER JOIN user ON user.id = loan.user_id \"\n           + \"WHERE user.name LIKE :userName\")\n   public List&lt;Book&gt; findBooksBorrowedByNameSync(String userName);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc774\ub7ec\ud55c \ucffc\ub9ac\ub4e4\ub85c \ubd80\ud130 POJO\ub97c \ubc18\ud658\ud560\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uba74 \uc0ac\uc6a9\uc790\uc640 \uc560\uc644\ub3d9\ubb3c\uc758 \uc774\ub984\uc744 \ubd88\ub7ec\uc624\ub294 \ucffc\ub9ac\ub97c \uc791\uc131\ud558\ub294\uac83\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<table class=\"wysiwyg-macro\" style=\"background-image: url('http:\/\/wiki.navercorp.com\/plugins\/servlet\/confluence\/placeholder\/macro-heading?definition=e2NvZGV9&amp;locale=ko_KR&amp;version=2'); background-repeat: no-repeat;\" data-macro-name=\"code\" data-macro-id=\"d33515db-8cd8-4d38-95d0-eb539b1b117f\" data-macro-schema-version=\"1\" data-macro-body-type=\"PLAIN_TEXT\">\n<tbody>\n<tr>\n<td class=\"wysiwyg-macro-body\">\n<pre class=\"lang:java decode:true \">@Dao\npublic interface MyDao {\n   @Query(\"SELECT user.name AS userName, pet.name AS petName \"\n          + \"FROM user, pet \"\n          + \"WHERE user.id = pet.user_id\")\n   public LiveData&lt;List&lt;UserPet&gt;&gt; loadUserAndPetNames();\n   \/\/ You can also define this class in a separate file, as long as you add the\n   \/\/ \"public\" access modifier.\n   static class UserPet {\n       public String userName;\n       public String petName;\n   }\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Room\uc744 \ud65c\uc6a9\ud558\uc5ec Local \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 data\ub97c \uc800\uc7a5\ud574\ubcf4\uc790 Room \uc740 SQLite\ub97c \ucd94\uc0c1\uacc4\uce35\uc73c\ub85c \uac10\uc2f8\uace0 \uc788\uc73c\uba70, \uc27d\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc811\uadfc\ud558\uc5ec SQLite\ub97c \ub9c8\uad6c\ub9c8\uad6c \uc790\uc720\ub86d\uac8c \ud480\ud30c\uc6cc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. Room\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 \ub9cc\ub9cc\uce58 \uc54a\uc740 \uc591\uc758 \uad6c\uc870\ud654\ub41c \ub370\uc774\ud130\ub97c \uc601\uad6c\uc801\uc73c\ub85c \uc800\uc7a5\ud558\uace0 \ucc98\ub9ac\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\ub3c4 \uadf8\ub920\uc787 \ud558\uac8c \uc774\ub4dd\uc744 \ubcfc\uc218 \uc788\ub294 \ubd80\ubd84\uc774 \uc788\ub2e4. \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0\ub294 \uad00\ub828 \ub370\uc774\ud130\uc758 \uc870\uac01\ub4e4\uc744 \uce90\uc2dc\ud654 \ud558\ub294\uac83\uc774\uc600\ub2e4. \uc774 \ubc29\ubc95\uc5d0\uc11c\ub294 \uae30\uae30\uac00 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/368"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=368"}],"version-history":[{"count":0,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/368\/revisions"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}