{"id":36919,"date":"2024-11-01T09:53:20","date_gmt":"2024-11-01T09:53:20","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36919"},"modified":"2024-11-01T11:43:01","modified_gmt":"2024-11-01T11:43:01","slug":"course-on-kotlin-android-app-development-creating-an-improved-to-do-list-app","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36919\/","title":{"rendered":"course on Kotlin Android App Development, Creating an Improved To-Do List App"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this blog post, we will cover how to develop an Android app using Kotlin. Specifically, we will detail the process of creating an improved Todo List app. This app has been enhanced to be more useful by adding features such as a database and social sharing, in addition to the basic Todo List functionality.<\/p>\n<h2>Course Overview<\/h2>\n<p>This course consists of the following main topics:<\/p>\n<ul>\n<li>Project Setup<\/li>\n<li>UI Design<\/li>\n<li>Setting up and implementing Room Database<\/li>\n<li>Implementing add and delete functionality for tasks<\/li>\n<li>Implementing functionality to mark tasks as completed<\/li>\n<li>Adding social sharing functionality<\/li>\n<\/ul>\n<h2>1. Project Setup<\/h2>\n<p>We will create a new project through Android Studio. The project name will be set to \u2018ImprovedTodoList\u2019. At this time, please select Kotlin as the language and set the optimal API level.<\/p>\n<h3>1.1 Adding Gradle Dependencies<\/h3>\n<p>We need to add the Room database and other necessary libraries. Add the following code to the <code>dependencies<\/code> section of the &#8216;build.gradle (Module: app)&#8217; file:<\/p>\n<pre><code>dependencies {\n    implementation \"androidx.room:room-runtime:2.4.2\"\n    kapt \"androidx.room:room-compiler:2.4.2\"\n    implementation \"androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1\"\n    implementation \"androidx.lifecycle:lifecycle-livedata-ktx:2.4.1\"\n    implementation \"androidx.activity:activity-ktx:1.4.0\"\n    implementation \"androidx.appcompat:appcompat:1.4.1\"\n    implementation \"com.google.android.material:material:1.5.0\"\n}<\/code><\/pre>\n<h2>2. UI Design<\/h2>\n<p>First, we will design the basic UI. Design the UI in the <code>activity_main.xml<\/code> file with the following code:<\/p>\n<pre><code>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/editTextTodo\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Enter your task\"\/&gt;\n\n    &lt;Button\n        android:id=\"@+id\/buttonAdd\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Add\"\/&gt;\n\n    &lt;RecyclerView\n        android:id=\"@+id\/recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h3>2.1 Setting Up RecyclerView and Adapter<\/h3>\n<p>We will use <code>RecyclerView<\/code> to display the list of tasks. Create a file called <code>todo_item.xml<\/code> to define the layout of the items and add the following code:<\/p>\n<pre><code>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    android:padding=\"16dp\"&gt;\n\n    &lt;CheckBox\n        android:id=\"@+id\/checkBox\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\/&gt;\n\n    &lt;TextView\n        android:id=\"@+id\/textViewTodo\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:paddingStart=\"8dp\"\n        android:paddingEnd=\"8dp\"\/&gt;\n\n    &lt;Button\n        android:id=\"@+id\/buttonDelete\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Delete\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h2>3. Setting up and Implementing Room Database<\/h2>\n<p>Now we will set up the Room database. Create an entity class called <code>Todo<\/code> to define the structure of the data table:<\/p>\n<pre><code>import androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = \"todo_table\")\ndata class Todo(\n    @PrimaryKey(autoGenerate = true) val id: Int = 0,\n    val task: String,\n    var isCompleted: Boolean = false\n)<\/code><\/pre>\n<h3>3.1 Creating TodoDao Interface<\/h3>\n<p>Create a DAO (Data Access Object) to interact with the Todo entity:<\/p>\n<pre><code>import androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.Query\nimport androidx.room.Update\n\n@Dao\ninterface TodoDao {\n    @Insert\n    suspend fun insert(todo: Todo)\n\n    @Query(\"SELECT * FROM todo_table ORDER BY id ASC\")\n    suspend fun getAllTodos(): List<Todo>\n\n    @Update\n    suspend fun update(todo: Todo)\n}<\/code><\/pre>\n<h3>3.2 Creating RoomDatabase Class<\/h3>\n<p>Create a class that defines the Room database:<\/p>\n<pre><code>import androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\nimport android.content.Context\n\n@Database(entities = [Todo::class], version = 1)\nabstract class TodoDatabase : RoomDatabase() {\n    abstract fun todoDao(): TodoDao\n\n    companion object {\n        @Volatile\n        private var INSTANCE: TodoDatabase? = null\n\n        fun getDatabase(context: Context): TodoDatabase {\n            return INSTANCE ?: synchronized(this) {\n                val instance = Room.databaseBuilder(\n                    context.applicationContext,\n                    TodoDatabase::class.java,\n                    \"todo_database\"\n                ).build()\n                INSTANCE = instance\n                instance\n            }\n        }\n    }\n}<\/code><\/pre>\n<h2>4. Implementing Add and Delete Functionality for Tasks<\/h2>\n<p>We will connect the UI and Room database in MainActivity. We will implement the functionality to add tasks:<\/p>\n<pre><code>import android.os.Bundle\nimport androidx.activity.viewModels\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.lifecycle.Observer\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport kotlinx.android.synthetic.main.activity_main.*\n\nclass MainActivity : AppCompatActivity() {\n    private val todoViewModel: TodoViewModel by viewModels()\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val adapter = TodoAdapter()\n        recyclerView.adapter = adapter\n        recyclerView.layoutManager = LinearLayoutManager(this)\n\n        todoViewModel.allTodos.observe(this, Observer { todos ->\n            todos?.let { adapter.submitList(it) }\n        })\n\n        buttonAdd.setOnClickListener {\n            val task = editTextTodo.text.toString()\n            if (task.isNotEmpty()) {\n                todoViewModel.insert(Todo(task = task))\n                editTextTodo.text.clear()\n            }\n        }\n    }\n}<\/code><\/pre>\n<h2>5. Implementing Functionality to Mark Tasks as Completed<\/h2>\n<p>We will add functionality to mark tasks as completed. We will add logic to reflect the state of the checkbox in the <code>TodoAdapter<\/code>:<\/p>\n<pre><code>import android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.CheckBox\nimport android.widget.TextView\nimport androidx.recyclerview.widget.DiffUtil\nimport androidx.recyclerview.widget.ListAdapter\nimport androidx.recyclerview.widget.RecyclerView\n\nclass TodoAdapter : ListAdapter<Todo, TodoAdapter.TodoViewHolder>(TodoDiffCallback()) {\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder {\n        val view = LayoutInflater.from(parent.context).inflate(R.layout.todo_item, parent, false)\n        return TodoViewHolder(view)\n    }\n\n    override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {\n        val todo = getItem(position)\n        holder.bind(todo)\n        holder.checkBox.setOnCheckedChangeListener { _, isChecked ->\n            todo.isCompleted = isChecked\n            \/\/ Update completion status\n            \/\/ viewModel.update(todo) \/\/ Call update method in ViewModel\n        }\n    }\n\n    class TodoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n        val textView: TextView = itemView.findViewById(R.id.textViewTodo)\n        val checkBox: CheckBox = itemView.findViewById(R.id.checkBox)\n\n        fun bind(todo: Todo) {\n            textView.text = todo.task\n            checkBox.isChecked = todo.isCompleted\n        }\n    }\n\n    class TodoDiffCallback : DiffUtil.ItemCallback<Todo>() {\n        override fun areItemsTheSame(oldItem: Todo, newItem: Todo): Boolean {\n            return oldItem.id == newItem.id\n        }\n\n        override fun areContentsTheSame(oldItem: Todo, newItem: Todo): Boolean {\n            return oldItem == newItem\n        }\n    }\n}<\/code><\/pre>\n<h2>6. Adding Social Sharing Functionality<\/h2>\n<p>Finally, we will add functionality to share tasks on social media. We will implement the sharing functionality using <code>Intent<\/code>:<\/p>\n<pre><code>import android.content.Intent\nimport android.view.View\nimport androidx.recyclerview.widget.RecyclerView\n\nclass TodoAdapter : ListAdapter<Todo, TodoAdapter.TodoViewHolder>(TodoDiffCallback()) {\n    \/\/ Previous code omitted...\n\n    override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {\n        val todo = getItem(position)\n        holder.bind(todo)\n\n        holder.itemView.setOnClickListener {\n            val shareIntent = Intent().apply {\n                action = Intent.ACTION_SEND\n                putExtra(Intent.EXTRA_TEXT, todo.task)\n                type = \"text\/plain\"\n            }\n            holder.itemView.context.startActivity(Intent.createChooser(shareIntent, \"Choose where to share.\"))\n        }\n    }\n}<\/code><\/pre>\n<h2>Conclusion<\/h2>\n<p>Now the improved Todo List app is complete. This app provides functionality for users to add tasks, mark them as completed, delete tasks, and share them on social media. I hope this course helped you build an efficient app using Kotlin and the Room database. In the next post, we will cover additional features or other app development techniques. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this blog post, we will cover how to develop an Android app using Kotlin. Specifically, we will detail the process of creating an improved Todo List app. This app has been enhanced to be more useful by adding features such as a database and social sharing, in addition to the basic Todo List &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36919\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;course on Kotlin Android App Development, Creating an Improved To-Do List App&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[143],"tags":[],"class_list":["post-36919","post","type-post","status-publish","format-standard","hentry","category-kotlin-android-app-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/36919\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this blog post, we will cover how to develop an Android app using Kotlin. Specifically, we will detail the process of creating an improved Todo List app. This app has been enhanced to be more useful by adding features such as a database and social sharing, in addition to the basic Todo List &hellip; \ub354 \ubcf4\uae30 &quot;course on Kotlin Android App Development, Creating an Improved To-Do List App&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36919\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:53:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:43:01+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"course on Kotlin Android App Development, Creating an Improved To-Do List App\",\"datePublished\":\"2024-11-01T09:53:20+00:00\",\"dateModified\":\"2024-11-01T11:43:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/\"},\"wordCount\":408,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin Android app development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36919\/\",\"name\":\"course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:53:20+00:00\",\"dateModified\":\"2024-11-01T11:43:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36919\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36919\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"course on Kotlin Android App Development, Creating an Improved To-Do List App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/36919\/","og_locale":"ko_KR","og_type":"article","og_title":"course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this blog post, we will cover how to develop an Android app using Kotlin. Specifically, we will detail the process of creating an improved Todo List app. This app has been enhanced to be more useful by adding features such as a database and social sharing, in addition to the basic Todo List &hellip; \ub354 \ubcf4\uae30 \"course on Kotlin Android App Development, Creating an Improved To-Do List App\"","og_url":"https:\/\/atmokpo.com\/w\/36919\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:53:20+00:00","article_modified_time":"2024-11-01T11:43:01+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/36919\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36919\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"course on Kotlin Android App Development, Creating an Improved To-Do List App","datePublished":"2024-11-01T09:53:20+00:00","dateModified":"2024-11-01T11:43:01+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36919\/"},"wordCount":408,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin Android app development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36919\/","url":"https:\/\/atmokpo.com\/w\/36919\/","name":"course on Kotlin Android App Development, Creating an Improved To-Do List App - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:53:20+00:00","dateModified":"2024-11-01T11:43:01+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36919\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36919\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36919\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"course on Kotlin Android App Development, Creating an Improved To-Do List App"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36919","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=36919"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36919\/revisions"}],"predecessor-version":[{"id":36920,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36919\/revisions\/36920"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}