{"componentChunkName":"component---src-templates-blog-post-js","path":"/android/android-room/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"e444bd2d-a87a-5f4c-948c-ec1d6a70492e","excerpt":"Android ROOM 개요 Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite…","html":"<p><img src=\"/assets/android-logo.png\" alt=\"Android ROOM\" title=\"Android ROOM\"></p>\n<h2 id=\"개요\" style=\"position:relative;\"><a href=\"#%EA%B0%9C%EC%9A%94\" aria-label=\"개요 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>개요</h2>\n<blockquote>\n<p>Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용합니다. 상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬로 유지하여 대단한 이점을 얻을 수 있습니다. 가장 일반적인 사용 사례는 관련 데이터를 캐싱하는 것입니다. 이런 방식으로 기기가 네트워크에 액세스할 수 없을 때 오프라인 상태인 동안에도 사용자가 여전히 콘텐츠를 탐색할 수 있습니다. 나중에 기기가 다시 온라인 상태가 되면 사용자가 시작한 콘텐츠 변경사항이 서버에 동기화됩니다. Room은 이러한 문제를 자동으로 처리하므로 SQLite 대신 Room을 사용할 것을 적극적으로 권장합니다.</p>\n</blockquote>\n<h2 id=\"room-특징\" style=\"position:relative;\"><a href=\"#room-%ED%8A%B9%EC%A7%95\" aria-label=\"room 특징 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ROOM 특징</h2>\n<p><img src=\"/assets/android_room_architecture.png\" alt=\"Android ROOM Architecture\" title=\"Android ROOM Architecture\"></p>\n<p>Android ROOM Architecture</p>\n<h3 id=\"database-데이터베이스\" style=\"position:relative;\"><a href=\"#database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\" aria-label=\"database 데이터베이스 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Database (데이터베이스)</h3>\n<p>저장하는 데이터의 집합 단위를 말합니다</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token annotation builtin\">@Database</span><span class=\"token punctuation\">(</span>version <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> entities <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>Coffees<span class=\"token punctuation\">.</span>class<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">abstract</span> <span class=\"token keyword\">class</span> AppDatabase extends <span class=\"token function\">RoomDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">abstract</span> <span class=\"token keyword\">public</span> CoffeesDao <span class=\"token function\">coffeesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"entity-항목\" style=\"position:relative;\"><a href=\"#entity-%ED%95%AD%EB%AA%A9\" aria-label=\"entity 항목 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Entity (항목)</h3>\n<p>데이터베이스 내의 테이블을 의미합니다</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token annotation builtin\">@Entity</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> Coffees<span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 기본키</span>\n  <span class=\"token annotation builtin\">@PrimaryKey</span>\n  <span class=\"token keyword\">public</span> int id<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> String title<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"dao-다오\" style=\"position:relative;\"><a href=\"#dao-%EB%8B%A4%EC%98%A4\" aria-label=\"dao 다오 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DAO (다오)</h3>\n<p>데이터베이스에 접근하는 함수(insert,update,delete,…)를 제공합니다</p>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token annotation builtin\">@Dao</span>\n<span class=\"token keyword\">interface</span> CoffeesDao <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 조회</span>\n  <span class=\"token annotation builtin\">@Query</span><span class=\"token punctuation\">(</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"SELECT * FROM table_coffees\"</span></span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> List<span class=\"token operator\">&lt;</span>Coffees<span class=\"token operator\">></span>\n\n  <span class=\"token comment\">// 입력</span>\n  <span class=\"token annotation builtin\">@Insert</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">insertAll</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">vararg</span> contacts<span class=\"token operator\">:</span> Coffees<span class=\"token punctuation\">)</span>\n\n  <span class=\"token comment\">// 삭제</span>\n  <span class=\"token annotation builtin\">@Delete</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>contacts<span class=\"token operator\">:</span> Coffees<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"사용해-보기\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B3%B4%EA%B8%B0\" aria-label=\"사용해 보기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>사용해 보기</h2>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">pakage\n│── MainActivity.kt\n│── AppDatabase.kt\n│── Coffees.kt\n└── CoffeesDao.kt</code></pre></div>\n<h3 id=\"gradle에-room-추가\" style=\"position:relative;\"><a href=\"#gradle%EC%97%90-room-%EC%B6%94%EA%B0%80\" aria-label=\"gradle에 room 추가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Gradle에 ROOM 추가</h3>\n<p>room dependencies를 추가해준다</p>\n<p>app/build.gradle</p>\n<div class=\"gatsby-highlight\" data-language=\"groovy\"><pre class=\"language-groovy\"><code class=\"language-groovy\">dependencies <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">def</span> room_version <span class=\"token operator\">=</span> <span class=\"token interpolation-string\"><span class=\"token string\">\"2.2.6\"</span></span>\n\n  implementation <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-runtime:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n  annotationProcessor <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-compiler:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n  implementation <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-ktx:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n  implementation <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-rxjava2:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n  implementation <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-guava:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n  testImplementation <span class=\"token interpolation-string\"><span class=\"token string\">\"androidx.room:room-testing:</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">$</span><span class=\"token expression\">room_version</span></span><span class=\"token string\">\"</span></span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"entity-만들기\" style=\"position:relative;\"><a href=\"#entity-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"entity 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Entity 만들기</h3>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// Coffees.kt</span>\n<span class=\"token annotation builtin\">@Entity</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> Coffees<span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 기본키</span>\n  <span class=\"token annotation builtin\">@PrimaryKey</span>\n  <span class=\"token keyword\">public</span> int id<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> String title<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"dao-만들기\" style=\"position:relative;\"><a href=\"#dao-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"dao 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Dao 만들기</h3>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// CoffeesDao.kt</span>\n<span class=\"token annotation builtin\">@Dao</span>\n<span class=\"token keyword\">interface</span> CoffeesDao <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 조회</span>\n  <span class=\"token annotation builtin\">@Query</span><span class=\"token punctuation\">(</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"SELECT * FROM table_coffees\"</span></span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> List<span class=\"token operator\">&lt;</span>Coffees<span class=\"token operator\">></span>\n\n  <span class=\"token comment\">// 입력</span>\n  <span class=\"token annotation builtin\">@Insert</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">insertAll</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">vararg</span> contacts<span class=\"token operator\">:</span> Coffees<span class=\"token punctuation\">)</span>\n\n  <span class=\"token comment\">// 삭제</span>\n  <span class=\"token annotation builtin\">@Delete</span>\n  <span class=\"token keyword\">fun</span> <span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>contacts<span class=\"token operator\">:</span> Coffees<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"database-만들기\" style=\"position:relative;\"><a href=\"#database-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"database 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Database 만들기</h3>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// AppDatabase.kt</span>\n<span class=\"token annotation builtin\">@Database</span><span class=\"token punctuation\">(</span>entities <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>Coffees<span class=\"token punctuation\">]</span><span class=\"token operator\">::</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> version <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> exportSchema <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">abstract</span> <span class=\"token keyword\">class</span> AppDatabase <span class=\"token operator\">:</span> <span class=\"token function\">RoomDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">abstract</span> <span class=\"token keyword\">fun</span> <span class=\"token function\">coffeesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> CoffeesDao\n\n    <span class=\"token keyword\">companion</span> <span class=\"token keyword\">object</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">private</span> <span class=\"token keyword\">var</span> instance<span class=\"token operator\">:</span> AppDatabase<span class=\"token operator\">?</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span>\n\n        <span class=\"token annotation builtin\">@Synchronized</span>\n        <span class=\"token keyword\">fun</span> <span class=\"token function\">getInstance</span><span class=\"token punctuation\">(</span>context<span class=\"token operator\">:</span> Context<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> AppDatabase<span class=\"token operator\">?</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>instance <span class=\"token operator\">==</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                instance <span class=\"token operator\">=</span> Room<span class=\"token punctuation\">.</span><span class=\"token function\">databaseBuilder</span><span class=\"token punctuation\">(</span>\n                    context<span class=\"token punctuation\">.</span>applicationContext<span class=\"token punctuation\">,</span>\n                    AppDatabase<span class=\"token operator\">::</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">.</span>java<span class=\"token punctuation\">,</span>\n                    <span class=\"token string-literal singleline\"><span class=\"token string\">\"database-coffeeapp\"</span></span>\n                <span class=\"token punctuation\">)</span>\n                    <span class=\"token punctuation\">.</span><span class=\"token function\">allowMainThreadQueries</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n                    <span class=\"token punctuation\">.</span><span class=\"token function\">build</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">return</span> instance\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"mainactivity\" style=\"position:relative;\"><a href=\"#mainactivity\" aria-label=\"mainactivity permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>MainActivity</h3>\n<div class=\"gatsby-highlight\" data-language=\"kotlin\"><pre class=\"language-kotlin\"><code class=\"language-kotlin\"><span class=\"token comment\">// MainActivity.kt</span>\n<span class=\"token keyword\">var</span> db <span class=\"token operator\">:</span> AppDatabase<span class=\"token operator\">?</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span>\n\n<span class=\"token keyword\">override</span> <span class=\"token keyword\">fun</span> <span class=\"token function\">onCreate</span><span class=\"token punctuation\">(</span>savedInstanceState<span class=\"token operator\">:</span> Bundle<span class=\"token operator\">?</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">val</span> coffee <span class=\"token operator\">=</span> <span class=\"token function\">Coffees</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> 'title'<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// insert</span>\n  db<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token function\">coffesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token function\">insertAll</span><span class=\"token punctuation\">(</span>coffee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// select</span>\n  <span class=\"token keyword\">val</span> list <span class=\"token operator\">=</span> db<span class=\"token operator\">!!</span><span class=\"token punctuation\">.</span><span class=\"token function\">coffesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Log<span class=\"token punctuation\">.</span><span class=\"token function\">i</span><span class=\"token punctuation\">(</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"MainActivity\"</span></span><span class=\"token punctuation\">,</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"\"</span></span><span class=\"token operator\">+</span>list<span class=\"token punctuation\">.</span>size<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 1</span>\n\n  <span class=\"token comment\">// delete</span>\n  db<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token function\">coffesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>coffee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// select</span>\n  <span class=\"token keyword\">val</span> list <span class=\"token operator\">=</span> db<span class=\"token operator\">!!</span><span class=\"token punctuation\">.</span><span class=\"token function\">coffesDao</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Log<span class=\"token punctuation\">.</span><span class=\"token function\">i</span><span class=\"token punctuation\">(</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"MainActivity\"</span></span><span class=\"token punctuation\">,</span><span class=\"token string-literal singleline\"><span class=\"token string\">\"\"</span></span><span class=\"token operator\">+</span>list<span class=\"token punctuation\">.</span>size<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 0</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>안드로이드 앱에서 내부 DB의 개념과 실제로 Room 데이터베이스 라이브러리를 활용하여 입력,출력,삭제를 구현한 예제 이다. Room DB 라이브러리를 사용해보기 전 SQLite DB 라이브러리를 먼저 접해보시는 것을 추천 한다. 다음에는 간단한 TODO 앱을 개발해 보겠다.</p>","tableOfContents":"<ul>\n<li><a href=\"/android/android-room/#%EA%B0%9C%EC%9A%94\">개요</a></li>\n<li>\n<p><a href=\"/android/android-room/#room-%ED%8A%B9%EC%A7%95\">ROOM 특징</a></p>\n<ul>\n<li><a href=\"/android/android-room/#database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\">Database (데이터베이스)</a></li>\n<li><a href=\"/android/android-room/#entity-%ED%95%AD%EB%AA%A9\">Entity (항목)</a></li>\n<li><a href=\"/android/android-room/#dao-%EB%8B%A4%EC%98%A4\">DAO (다오)</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/android/android-room/#%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B3%B4%EA%B8%B0\">사용해 보기</a></p>\n<ul>\n<li><a href=\"/android/android-room/#gradle%EC%97%90-room-%EC%B6%94%EA%B0%80\">Gradle에 ROOM 추가</a></li>\n<li><a href=\"/android/android-room/#entity-%EB%A7%8C%EB%93%A4%EA%B8%B0\">Entity 만들기</a></li>\n<li><a href=\"/android/android-room/#dao-%EB%A7%8C%EB%93%A4%EA%B8%B0\">Dao 만들기</a></li>\n<li><a href=\"/android/android-room/#database-%EB%A7%8C%EB%93%A4%EA%B8%B0\">Database 만들기</a></li>\n<li><a href=\"/android/android-room/#mainactivity\">MainActivity</a></li>\n</ul>\n</li>\n</ul>","wordCount":{"words":163},"fields":{"slug":"/android/android-room/","image":"/assets/android-logo.png","faq":[]},"frontmatter":{"title":"Android ROOM","date":"2021년 5월 2일","dateISO":"2021-05-02T18:11:34.709Z","updatedISO":null,"category":"android","description":null,"tags":["android","kotlin","framework","room"]}}},"pageContext":{"slug":"/android/android-room/","previous":{"fields":{"slug":"/vue/vue-js-소프트웨어국제화-i18n/"},"frontmatter":{"title":"Vue Js 소프트웨어국제화(i18n)","tags":["vue","javascript","framework","frontend","web","file","FormData","FileReader"]}},"next":{"fields":{"slug":"/vue/vue-js-jwt-기반-사용자-인증/"},"frontmatter":{"title":"Vue Js 뷰 JWT 기반 사용자 인증","tags":["vue","javascript","framework","frontend","web","router guards","jwt"]}}}},"staticQueryHashes":["213619243","3262363727"]}