{"id":2245,"date":"2024-05-10T10:46:36","date_gmt":"2024-05-10T01:46:36","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=2245"},"modified":"2024-05-10T10:46:36","modified_gmt":"2024-05-10T01:46:36","slug":"android-kapt-to-ksp","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2024\/05\/10\/2245\/","title":{"rendered":"Android: Kapt to KSP"},"content":{"rendered":"\n<p>\uacf5\uc2dd \ubb38\uc11c <a href=\"https:\/\/developer.android.com\/build\/migrate-to-ksp\">Migrate from kapt to KSP<\/a> \uc5d0 \uc798 \uc124\uba85\ub418\uc5b4 \uc788\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kapt<\/h3>\n\n\n\n<p>Kapt\ub294 the Kotlin Annotation Processing Tool \uc758 \uc57d\uc790\ub85c Java Annotation\uc744 \ucf54\ud2c0\ub9b0\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc900\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c Kotlin \ucf54\ub4dc\uc5d0\uc11c Annotation\ub4e4\uc758 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud574\uc9c4\ub2e4. \uc608\ub97c \ub4e4\uba74, Room Database\ub97c \uc0ac\uc6a9\uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 Dao\ucf54\ub4dc\ub97c \ud544\uc694\ub85c \ud558\ub294\ub370,<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"@Dao\ninterface PlantDao {\n    @Query(&quot;SELECT * FROM plants ORDER BY name&quot;)\n    fun getPlants(): LiveData<List<Plant&gt;&gt;\n\n    @Query(&quot;SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name&quot;)\n    fun getPlantsWithGrowZoneNumber(growZoneNumber: Int): LiveData<List<Plant&gt;&gt;\n\n    @Query(&quot;SELECT * FROM plants WHERE id = :plantId&quot;)\n    fun getPlant(plantId: String): LiveData<Plant&gt;\n\n    @Insert(onConflict = OnConflictStrategy.REPLACE)\n    suspend fun insertAll(plants: List<Plant&gt;)\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">@Dao<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PlantDao<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    @Query(<\/span><span style=\"color: #A3BE8C\">&quot;SELECT * FROM plants ORDER BY name&quot;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">fun<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">getPlants<\/span><span style=\"color: #D8DEE9FF\">(): LiveData&lt;List&lt;Plant&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    @Query(<\/span><span style=\"color: #A3BE8C\">&quot;SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name&quot;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">fun<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">getPlantsWithGrowZoneNumber<\/span><span style=\"color: #D8DEE9FF\">(growZoneNumber: Int): LiveData&lt;List&lt;Plant&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    @Query(<\/span><span style=\"color: #A3BE8C\">&quot;SELECT * FROM plants WHERE id = :plantId&quot;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">fun<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">getPlant<\/span><span style=\"color: #D8DEE9FF\">(plantId: String): LiveData&lt;Plant&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    @Insert(onConflict <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> OnConflictStrategy.REPLACE)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">suspend<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">fun<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">insertAll<\/span><span style=\"color: #D8DEE9FF\">(plants: List&lt;Plant&gt;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>@Dao, @Query \ub4f1\uc774 \ucf54\ub4dc\uc5d0 \ubd80\uac00\uc801\uc73c\ub85c \ub2ec\ub824\uc788\ub294 annotation\uc774\uba70 Kapt\ub294 \uc774\ub97c \ud574\uc11d\ud558\uace0 \ud544\uc694\ud55c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4. <\/p>\n\n\n\n<p>Kapt\uc758 \uc0ac\uc6a9\uc740 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\uc758 \ucd94\uac00\ub85c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"plugins {\n    id 'kotlin-kapt'\n}\n...\ndependencies {\n    kapt &quot;androidx.room:room-compiler:2.6.1&quot;\n    kapt &quot;com.github.bumptech.glide:compiler:4.16.0&quot;\n...\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">plugins<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    id <\/span><span style=\"color: #A3BE8C\">&#39;kotlin-kapt&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">..<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">dependencies<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    kapt <\/span><span style=\"color: #A3BE8C\">&quot;androidx.room:room-compiler:2.6.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    kapt <\/span><span style=\"color: #A3BE8C\">&quot;com.github.bumptech.glide:compiler:4.16.0&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">..<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>kapt \ud50c\ub7ec\uadf8\uc778\uc744 \ucd94\uac00\ud558\uace0 \uc774\ub97c \uc0ac\uc6a9\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c kapt \ub85c \uae30\uc220\ud558\uace0\uc788\ub2e4. <\/p>\n\n\n\n<p> Kapt\uc758 \ubb38\uc81c\ub294 Java Annotation\uc73c\ub85c \ucc98\ub9ac\ud558\uae30\uc704\ud574 Kotlin \ucf54\ub4dc\ub85c\ubd80\ud130 Java Stubs \ucf54\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \ub2e8\uacc4\ub97c \uac70\uce5c\ub2e4. \uc774\ub294 \ucef4\ud30c\uc77c \ub2e8\uacc4\uc5d0\uc11c \ubd80\ud558\uac00 \uaf64 \ud070 \uc791\uc5c5\uc774\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">KSP<\/h3>\n\n\n\n<p>KSP\ub294 Kotlin Symbol Processing\uc758 \uc57d\uc790\ub85c, Kapt\ub97c \ub300\uccb4\ud558\uace0 Kotlin \ucf54\ub4dc\uc5d0\uc11c \uc9c1\uc811 Annotation\uc744 \ucc98\ub9ac\ud558\uae30\uc704\ud574 \ub9cc\ub4e4\uc5b4\uc9c4 \uac83\uc774\ub2e4. Kotlin \ucf54\ub4dc\ub97c \ubcf4\ub2e4 \uc798 \uc774\ud574\ud558\uace0 Java Stub\ucf54\ub4dc\uc758 \uc0dd\uc131\uc744 \uc81c\uac70\ud568\uc73c\ub85c\uc11c 2\ubc30\uc774\uc0c1 \ube68\ub77c\uc84c\ub2e4\uace0 \ud55c\ub2e4. \uadf8\ub798\uc11c \uc694\uc998 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624\uc5d0\uc11c kapt \ubd80\ubd84\uc774 \ubcf4\uc774\uba74 KSP\ub85c \ubc14\uafb8\ub3c4\ub85d \uad8c\uace0\ud558\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Migration Kapt to KSP<\/h3>\n\n\n\n<p> gradle \ud30c\uc77c\ub9cc \uc218\uc815\ud558\uba74\ub41c\ub2e4. \uc6b0\uc120 \ud504\ub85c\uc81d\ud2b8 \uc218\uc900\uc758 build.gradle\ud30c\uc77c\uc5d0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud55c\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"plugins {\n    id 'com.google.devtools.ksp' version '1.9.24-1.0.20' apply false\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">plugins<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    id <\/span><span style=\"color: #A3BE8C\">&#39;com.google.devtools.ksp&#39;<\/span><span style=\"color: #D8DEE9FF\"> version <\/span><span style=\"color: #A3BE8C\">&#39;1.9.24-1.0.20&#39;<\/span><span style=\"color: #D8DEE9FF\"> apply <\/span><span style=\"color: #81A1C1\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ubc84\uc804 \ub118\ubc84\ub294 <a href=\"https:\/\/github.com\/google\/ksp\/releases\">KSP\uc758 github<\/a>\uc5d0\uc11c \ud655\uc778 \uac00\ub2a5\ud558\ub2e4. \ub2e4\uc74c, \ubaa8\ub4c8 \ub808\ubca8 build.gradle\uc5d0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud55c\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"plugins {\n    id 'kotlin-kapt'\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">plugins<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    id <\/span><span style=\"color: #A3BE8C\">&#39;kotlin-kapt&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc774\uc81c kapt\ub97c \uc0ac\uc6a9\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc811\ub450\uc5b4\ub97c \ubc14\uafd4\uc900\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"dependencies {\n    \/\/kapt &quot;androidx.room:room-compiler:2.6.1&quot;\n    ksp &quot;androidx.room:room-compiler:2.6.1&quot;\n...\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">dependencies<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/kapt &quot;androidx.room:room-compiler:2.6.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ksp <\/span><span style=\"color: #A3BE8C\">&quot;androidx.room:room-compiler:2.6.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">..<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c kapt\uad00\ub828 \ucf54\ub4dc\ub97c \uc81c\uac70\ud574\uc900\ub2e4. \uc8fc\uc11d\ucc98\ub9ac\ub85c \ud45c\uc2dc\ud588\uc9c0\ub9cc, \uadf8\ub0e5 \uc0ad\uc81c\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" 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;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:#2e3440ff\"><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\" data-code=\"plugins {\n    \/\/id 'org.jetbrains.kotlin.kapt'\n}\n...\n\/\/kapt {\n    \/\/correctErrorTypes true\n    \/\/useBuildCache true\n\/\/}\n\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><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 nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">plugins<\/span><span style=\"color: #D8DEE9FF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/id &#39;org.jetbrains.kotlin.kapt&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">..<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/kapt {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/correctErrorTypes true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/useBuildCache true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Kapt\uac00 \uc5ec\uc804\ud788 \ud544\uc694\ud55c \uacbd\uc6b0<\/h3>\n\n\n\n<p> \uc608\ub97c\ub4e4\uc5b4 \ucf54\ub4dc\uac00 \uc544\uc9c1 databinding\uc744 \uc0ac\uc6a9\uc911\uc774\ub77c\uba74 Kapt\ub97c \uc0ad\uc81c\ud560 \uc218 \uc5c6\ub2e4. \uad6c\uae00\uc5d0\uc11c databinding\uc740 \uc608\uc804\ubc29\uc2dd\uc774\uace0 \uc644\uc804\ud788 compose\ub85c \ub118\uc5b4\uac04 \uc0c1\ud0dc\ub77c\uc11c databinding\uc5d0\uc11c KSP \uc9c0\uc6d0\uacc4\ud68d\uc740 \uc5c6\ub2e4\uace0 \ud55c\ub2e4. \uc774\ub7f0\uacbd\uc6b0\ub294 \uc5ec\uc804\ud788 Kapt\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294\ub370, \ud544\uc694\ud55c \ubd80\ubd84\uc740 KSP\ub85c \ubcc0\uacbd\ud558\uace0 databinding \uc0ac\uc6a9\ub9cc \uc77c\uc2dc\uc801\uc73c\ub85c kapt\ub97c \uc720\uc9c0\ud558\uc5ec Kapt\uc640 KSP\ub97c \ubcd1\ud589\uc0ac\uc6a9\ud558\ub294 \uac83\ub3c4 \ud558\ub098\uc758 \ubc29\ubc95\uc774\ub2e4. \uc774\ud6c4\uc5d0 kapt \uc758\uc874\uc131\uc774 \uc0ac\ub77c\uc9c0\uba74 \uc81c\uac70\ud574\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uacf5\uc2dd \ubb38\uc11c Migrate from kapt to KSP \uc5d0 \uc798 \uc124\uba85\ub418\uc5b4 \uc788\ub2e4. Kapt Kapt\ub294 the Kotlin Annotation Processing Tool \uc758 \uc57d\uc790\ub85c Java Annotation\uc744 \ucf54\ud2c0\ub9b0\uc5d0\uc11c \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc900\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c Kotlin \ucf54\ub4dc\uc5d0\uc11c Annotation\ub4e4\uc758 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud574\uc9c4\ub2e4. \uc608\ub97c \ub4e4\uba74, Room Database\ub97c \uc0ac\uc6a9\uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 Dao\ucf54\ub4dc\ub97c \ud544\uc694\ub85c \ud558\ub294\ub370, @Dao, @Query \ub4f1\uc774 \ucf54\ub4dc\uc5d0 \ubd80\uac00\uc801\uc73c\ub85c \ub2ec\ub824\uc788\ub294 annotation\uc774\uba70 Kapt\ub294 \uc774\ub97c <a href=\"http:\/\/batmask.net\/index.php\/2024\/05\/10\/2245\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,34],"tags":[186,382,385,38,383,384],"class_list":["post-2245","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-android-2","tag-kapt","tag-kapt-to-ksp","tag-kotlin","tag-ksp","tag-migration"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2245","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=2245"}],"version-history":[{"count":13,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2245\/revisions"}],"predecessor-version":[{"id":2258,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2245\/revisions\/2258"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=2245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=2245"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=2245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}