{"id":397327,"date":"2023-10-13T01:50:41","date_gmt":"2023-10-13T00:50:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=writerside&#038;p=397327"},"modified":"2025-09-17T13:45:47","modified_gmt":"2025-09-17T12:45:47","slug":"harnessing-the-power-of-the-kotlin-dsl-for-documentation","status":"publish","type":"writerside","link":"https:\/\/blog.jetbrains.com\/ko\/writerside\/2023\/10\/harnessing-the-power-of-the-kotlin-dsl-for-documentation\/","title":{"rendered":"\ubb38\uc11c \uc791\uc131\uc5d0 Kotlin DSL\uc758 \uac15\ub825\ud55c \uae30\ub2a5 \ud65c\uc6a9"},"content":{"rendered":"<div id=\"rank-math-toc\" class=\"wp-block-rank-math-toc-block\">\n<h2>\ubaa9\ucc28<\/h2>\n<nav>\n<ul>\n<li><a href=\"#dsl-what-dsl\">DSL? \uc5b4\ub5a4 DSL?<\/a><\/li>\n<li><a href=\"#the-essence-of-the-kotlin-dsl\">Kotlin DSL\uc758 \ubcf8\uc9c8<\/a><\/li>\n<li><a href=\"#demonstration\">\ub370\ubaa8<\/a><\/li>\n<li><a href=\"#three-key-strengths-of-our-approach\">\uc774 \uc811\uadfc \ubc29\uc2dd\uc774 \uac00\uc9c4 \uc138 \uac00\uc9c0 \uc8fc\uc694 \uc7a5\uc810<\/a>\n<ul>\n<li><a href=\"#separation-of-concerns\">\uad00\uc2ec \ubd80\ubd84\uc758 \ubd84\ub9ac<\/a><\/li>\n<li><a href=\"#docs-as-code-on-a-whole-new-level\">\uc644\uc804\ud788 \uc0c8\ub85c\uc6b4 \ucc28\uc6d0\uc758 Docs-as-Code<\/a><\/li>\n<li><a href=\"#extensibility\">\ud655\uc7a5\uc131<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#why-kotlin\">Kotlin\uc758 \uac15\uc810<\/a><\/li>\n<li><a href=\"#do-i-need-to-be-a-coder-to-use-the-kotlin-dsl\">Kotlin DSL\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ucf54\ub354\uac00 \ub418\uc5b4\uc57c \ud558\ub098\uc694?<\/a><\/li>\n<li><a href=\"#conclusion\">\uacb0\ub860<\/a><\/li>\n<\/ul>\n<\/nav>\n<\/div>\n<p>\uc774 \uc790\ub8cc\ub294 \uc6d0\ub798 \uac1c\ubc1c\uc790\uc758 \uc131\uacf5\uacfc \ube44\uc988\ub2c8\uc2a4\ub97c \uc9c0\uc6d0\ud558\ub294 API \ubb38\uc11c \ubc0f \uac1c\ubc1c\uc790 \ud3ec\ud138\uc758 \uc5ed\ud560\uc5d0 \ucd08\uc810\uc744\ub9de\ucd98 <a href=\"https:\/\/apithedocs.org\/amsterdam-2023\" target=\"_blank\" rel=\"noopener\">\uc554\uc2a4\ud14c\ub974\ub2f4\uc5d0\uc11c \uc5f4\ub9b0 API The <\/a><a href=\"https:\/\/apithedocs.org\/amsterdam-2023\" target=\"_blank\" rel=\"noreferrer noopener\">Docs<\/a><a href=\"https:\/\/apithedocs.org\/amsterdam-2023\" target=\"_blank\" rel=\"noopener\"> \ucf58\ud37c\ub7f0\uc2a4<\/a>\uc5d0\uc11c \ucc98\uc74c \ubc1c\ud45c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130 \uc9c1\ubb34\uc5d0\uc11c \uae30\uc220\uc801 \uce21\uba74\uc744 \ud5a5\uc0c1\ud558\ub824\ub294 \ubd84\ub4e4\uc5d0\uac8c \uc774 \ucf58\ud37c\ub7f0\uc2a4\ub97c \uc801\uadf9 \uad8c\uc7a5\ud569\ub2c8\ub2e4. \ubaa8\ub4e0 \uac15\uc5f0\uc740 \uc2e4\uc6a9\uc801\uc774\uace0 \uc720\uc775\ud558\uba70 \ub77c\uc774\ube0c \ub370\ubaa8\ub97c \ud3ec\ud568\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub54c\ub85c\ub294 \uba87 \uc904\uc758 \ucf54\ub4dc\uac00 \ubb38\uc11c \uc791\uc5c5\uc744 \uc644\ub8cc\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ubb38\uc11c\ub294 \ucf54\ub4dc\uac00 \uc544\ub2c8\uba70 \ubb38\uc11c\ub97c \uc791\uc131\ud560 \ub54c \uc678\ubd80 \uae30\ub2a5\uc774\ub098 \uc790\ub3d9\ud654\ub97c \ucd94\uac00\ud558\uae30\uac00 \uc5b4\ub824\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\uce58 \ucf54\ub4dc\uc778 \uac83\ucc98\ub7fc \ubb38\uc11c\ub97c \uc791\uc131\ud558\uace0 \ud2b9\uc815 \uc791\uc5c5\uc744 \uc644\ub8cc\ud55c \ub2e4\uc74c, \ucf54\ub4dc\ub97c \ub2e4\uc2dc \ubb38\uc11c\ub85c \ubc14\uafc0 \uc218\ub9cc \uc788\ub2e4\uba74 \uc5bc\ub9c8\ub098 \uc88b\uc744\uae4c\uc694!<\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Kotlin DSL\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubc14\ub85c \uadf8\ub807\uac8c \ubb38\uc11c\ub97c \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubd05\ub2c8\ub2e4.<\/p>\n<h2 id=\"dsl-what-dsl\" class=\"wp-block-heading\">DSL? \uc5b4\ub5a4 DSL?<\/h2>\n<p>DSL \uc989, &#8216;\ub3c4\uba54\uc778 \ud2b9\ud654 \uc5b8\uc5b4'(Domain-Specific Language)\ub97c \uc815\uc758\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uac04\ub2e8\ud788 \ub9d0\ud574\uc11c \ud2b9\uc815 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub3c4\ub85d \uc124\uacc4\ub41c \ud2b9\uc218 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc5b8\uc5b4\uc758 \uac1c\ub150\uacfc \uaddc\uce59\uc740 \ud2b9\uc815 \ub3c4\uba54\uc778\uc5d0 \ub530\ub77c \ub2e4\ub985\ub2c8\ub2e4.<\/p>\n<p>DSL\uc740 \uc791\uc740 \uc5b8\uc5b4 \ub610\ub294 \ubb38\uc81c \uc9c0\ud5a5 \uc5b8\uc5b4\ub77c\uace0\ub3c4 \ud569\ub2c8\ub2e4. DSL\uc740 \ud2b9\uc815 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \ub370 \ud2b9\ud654\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 \uc774\ub7ec\ud55c \uc815\uc758\ub294 \uadf8 \ubcf8\uc9c8\uc744 \ub354 \uc798 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>DSL\uc5d0\ub294 \ub450 \uac00\uc9c0 \uc720\ud615\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc678\ubd80 DSL\uc740 \uc790\uccb4 \ubb38\ubc95, \ub809\uc11c \ubc0f \ud30c\uc11c\ub97c \uac00\uc9c4 \ubcc4\ub3c4\uc758 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. SQL\uc774 \uc774\ub7ec\ud55c \uc5b8\uc5b4\uc758 \uc608\uc785\ub2c8\ub2e4. \ubc18\uba74\uc5d0 \ub0b4\ubd80 DSL\uc740 \ubc94\uc6a9 \uc5b8\uc5b4\uc758 \ubb38\ubc95\uacfc \ud30c\uc11c\ub97c \uc7ac\uc0ac\uc6a9\ud558\uace0 \ud574\ub2f9 \uc5b8\uc5b4\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud655\uc7a5 \uc635\uc158\uc744 \ud65c\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\ubb38\uc11c\uc6a9 Kotlin DSL\uc740 \ub0b4\ubd80 DSL\uc758 \ubc94\uc8fc\uc5d0 \uc18d\ud569\ub2c8\ub2e4.<img decoding=\"async\" style=\"width: 800px;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/DPVqP9QaPL4sgtzPUXYFds_nslOPtcvYbh4XryE0UlK0t7cLZhrVnvTIMczXpdIjQVrhLwi5e3y_1ydWfspdNyxOQRsoHcD84FS0LuwF5xSYmxYoaLJufSNenaF9vFAXBTSnwno_bbPsAqKpSdczM94.png\" \/><\/p>\n<p>Kotlin\uc744 \uc0ac\uc6a9\ud558\uba74 \uc678\ubd80 DSL\uc758 \ubaa8\uc591\uacfc \ub290\ub08c\uc73c\ub85c \ub0b4\ubd80 DSL\uc744 \ube4c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \uc800\ud76c\uac00 \uac1c\ubc1c\ud55c \uc5b8\uc5b4\ub294 \ubb38\uc11c\uc5d0 \ud2b9\ud654\ub41c \ub0b4\ubd80 DSL\uc785\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/mps\/concepts\/domain-specific-languages\/\" target=\"_blank\" rel=\"noopener\">JetBrains MPS <\/a><a href=\"https:\/\/www.jetbrains.com\/mps\/concepts\/domain-specific-languages\/\" target=\"_blank\" rel=\"noreferrer noopener\">\uc6f9\uc0ac\uc774\ud2b8<\/a>\uc5d0\uc11c \uc678\ubd80 DSL\uacfc \ub0b4\ubd80 DSL\uc758 \ucc28\uc774\uc810\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.<\/p>\n<h2 id=\"the-essence-of-the-kotlin-dsl\" class=\"wp-block-heading\">Kotlin DSL\uc758 \ubcf8\uc9c8<\/h2>\n<p>\ubb38\uc11c\uc6a9 Kotlin DSL\uc740 \ubb38\uc11c\uc640 \uc815\uc801 \uc6f9\uc0ac\uc774\ud2b8\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574 \ud2b9\ubcc4\ud788 \uc124\uacc4\ub41c \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud504\ub808\uc784\uc6cc\ud06c\ub294 \uae30\ubcf8 \ubb38\uc11c \uc694\uc18c\uc5d0\uc11c \uc791\ub3d9\ud558\ub294 <a href=\"https:\/\/kotlinlang.org\/docs\/type-safe-builders.html\" target=\"_blank\" rel=\"noreferrer noopener\">\ud0c0\uc785 \uc548\uc804\ud615 \ube4c\ub354<\/a>\uc774\uba70 \ucd94\uac00 \uae30\ub2a5\uc740 \uc0ac\uc6a9\uc790 \ucf54\ub4dc \ub610\ub294 \uc678\ubd80 \uc885\uc18d\uc131\uc73c\ub85c \uc5f0\uacb0\ub429\ub2c8\ub2e4. \uc885\uc18d\uc131\uc740 \ud2b9\uc815 \uc18c\uc2a4 \ub610\ub294 \ucd9c\ub825 \ud615\uc2dd\ubd80\ud130 \uc790\uc5f0\uc5b4 \ucc98\ub9ac \uae30\ub2a5\uc5d0 \uc774\ub974\uae30\uae4c\uc9c0 \ubaa8\ub4e0 \uc885\ub958\uc758 \uae30\ub2a5\uc744 \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130\ub294 Kotlin DSL\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucc55\ud130, \uc808\ucc28, \ud14c\uc774\ube14, \ubaa9\ub85d \ub4f1\uacfc \uac19\uc740 \uc758\ubbf8\ub860\uc801 \uc694\uc18c\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \uc790\uccb4 \ub9c8\ud06c\uc5c5\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd94\uc5c8\uc9c0\ub9cc DSL\uc758 \uc720\uc5f0\uc131 \ub355\ubd84\uc5d0 \ub9de\ucda4\ud654\ub41c \ud655\uc7a5\uc774 \uac00\ub2a5\ud558\uc5ec \uc774\ub860\uc801\uc73c\ub85c \ubaa8\ub4e0 \uc785\ub825 \ud615\uc2dd\uc744 \ubaa8\ub4e0 \ucd9c\ub825 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc694\uc18c \uc218\uc900\uc5d0\uc11c \uc0ac\uc6a9\uc790\uac00 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc694\uc18c\uc5d0 \ubcf5\uc7a1\ud55c \ub17c\ub9ac\ub97c \ucea1\uc290\ud654\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub7ec\uba74 \ub2e8\ub77d\uc774\ub098 \ubaa9\ub85d\ucc98\ub7fc \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin DSL\uc758 \uc911\uc694\ud55c \uc774\uc810 \uc911 \ud558\ub098\ub294 IntelliJ IDEA\uc640 \uac19\uc740 \ud1b5\ud569 \uac1c\ubc1c \ud658\uacbd(IDE)\uc774 \uc624\ub958 \uac80\uc0ac, \ucf54\ub4dc \uc644\uc131, \ub9ac\ud329\ud130\ub9c1 \ub4f1\uc758 \uc9c0\uc6d0\uc744 \uae30\ubcf8 \uc81c\uacf5\ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub294 \uc791\uc131\ub41c \ub0b4\uc6a9\uc758 \ud488\uc9c8\uc744 \ud5a5\uc0c1\ud558\ub294 \ub370 \uc2dc\ud0a4\ub294 \ub370 \ud06c\uac8c \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" style=\"width: 800px;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/a0ZILDvEKzbZYBvdhhF6u_nlDfCyCDXQNVJHfHaKO9_LfLtQtWanIcwTQLHoEqUi1HuBD9UaPvc9lN7XVgXfFJPBKikrVtXcX8ckN8ru4h1SjOmMvGxlvwfhfHr74exdNiWMnQlhFrLX_7rYlVydlYY.png\" \/><\/p>\n<p><em>\uc911\ubcf5 \ud0d0\uc9c0\uc758 \uc791\ub3d9 \ubc29\uc2dd\uc744 \ubcf4\uc5ec\uc8fc\ub294 \uc608<\/em><\/p>\n<p>\uc18c\uc2a4\uac00 \uc77c\ubc18 Kotlin \ucf54\ub4dc\uc774\ubbc0\ub85c \ubaa8\ub4e0 \ucf54\ub4dc \uc815\ubcf4\uc640 \uc5b8\uc5b4 \uc9c0\uc6d0 \uae30\ub2a5\uc744 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\ub97c \ud0d0\uc0c9\ud574\uc57c \ud558\ub098\uc694? \ubd88\ud544\uc694\ud55c \ucf54\ub4dc\uc640 \uc911\ubcf5\ub41c \ucf54\ub4dc\ub97c \ucc3e\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? \uc544\ub2c8\uba74 \ub2e4\ub978 \uc5b8\uc5b4\ub97c \ubb38\uc790\uc5f4 \ub9ac\ud130\ub7f4\uc5d0 \uc0bd\uc785\ud558\ub824\uace0 \ud558\ub098\uc694? \uc774\ub7ec\ud55c \ubaa8\ub4e0 IDE \uae30\ub2a5\uc774 Kotlin DSL\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc5b8\uc5b4 \uc790\uccb4\uc758 \uce21\uba74\uc5d0\uc11c, Kotlin\uc740 \uc644\uc804\ud55c \uc815\uc801 \ud0c0\uc785 \uc9c0\uc815 \ubc0f \uc720\uc6a9\ud55c \ub3c4\uad6c\ub97c \uc5bb\uc744 \uc218 \uc788\ub294 \uc804\uccb4 \uc5d0\ucf54\uc2dc\uc2a4\ud15c \ub4f1\uc758 \ud070 \uc774\uc810\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc740 DSL\uc774 \uc0ac\uc6a9\uc790 \uc9c0\uc815 XML \ub9c8\ud06c\uc5c5\uc744 \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc8fc\uc9c0\ub9cc \ud2b9\uc815 \uc694\uad6c \uc0ac\ud56d\uc5d0 \ub530\ub77c HTML \ub610\ub294 .docx\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ucd9c\ub825 \ud615\uc2dd\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \uc54c\uace0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c DSL\uc740 IntelliJ IDEA\ubfd0\ub9cc \uc544\ub2c8\ub77c \ub2e4\ub978 \uc5d0\ub514\ud130\uc5d0\uc11c, \uc2ec\uc9c0\uc5b4 \uba85\ub839\uc904\uc744 \ud1b5\ud574\uc11c\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Kotlin \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uac00 \uc81c\uacf5\ud558\ub294 \ubb34\ud55c\ud55c \uac00\ub2a5\uc131\uc744 \ud65c\uc6a9\ud558\uba74\uc11c \uc5ec\uc804\ud788 \ub0b4\uc6a9\uc744 \uc791\uc131\ud558\ub294 \uac83 \uac19\uc740 \uacbd\ud5d8\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \ub9c8\ud06c\uc5c5\uc774 \uc5b4\ub5bb\uac8c \ud45c\uc2dc\ub418\ub294\uc9c0 \ubcf4\uc5ec\uc8fc\ub294 \uba87 \uac00\uc9c0 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<p>\uccab \ubc88\uc9f8 \uc608\uc5d0\uc11c\ub294 \ub450 \uac1c\uc758 \ubaa9\ub85d \ud56d\ubaa9\uc774 \uc788\ub294 \ub2e8\ub77d\uacfc \ubaa9\ub85d\uc744 \ub9cc\ub4e4\uace0 \uc774\ub7ec\ud55c \uc694\uc18c \ub0b4\uc5d0 \uc77c\ubd80 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\">val content = StardustDslContentProvider {\n   p { +\"Hello, DSL\"}\n   list {\n       li { +\"List item 1\" }\n       li { +\"List item 2\" }\n   }\n   this\n}<\/pre>\n<p>\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ub098\ud0c0\ub0a9\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-376908\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/CleanShot-2023-07-31-at-11.08.02-2x.png\" alt=\"\" width=\"1006\" height=\"326\" \/><\/figure>\n<p>\ub450 \ubc88\uc9f8 \uc608\uc5d0\uc11c\ub294 \ub450 \uac1c\uc758 \uc5f4\uc774 \uc788\ub294 \ud45c\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\">val content = StardustDslContentProvider {\n   table {\n       tr {\n           td {\n               +\"Parameter name\"\n           }\n           td {\n               +\"Parameter type\"\n           }\n       }\n       tr {\n           td {\n               +\"Value 1\"\n           }\n           td {\n               +\"Value 2\"\n           }\n       }\n       this\n   }<\/pre>\n<p>\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubc14\ub01d\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-376919\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/CleanShot-2023-07-31-at-11.09.17-2x.png\" alt=\"\" width=\"1238\" height=\"302\" \/><\/figure>\n<p>\uc138 \ubc88\uc9f8 \uc608\uc5d0\uc11c\ub294 XML \ub610\ub294 Markdown\uacfc \uac19\uc740 \ub2e4\ub978 \uc5b8\uc5b4\ub97c \uc0bd\uc785\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \uc544\ub798\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc138 \ub2e8\uacc4\uac00 \uc788\ub294 \uc808\ucc28\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\">xml(\"\"\"\n    \n        1\ub2e8\uacc4\n        2\ub2e8\uacc4\n        3\ub2e8\uacc4\n    \n\"\"\")<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-376931\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/CleanShot-2023-07-31-at-11.09.41-2x.png\" alt=\"\uc138 \ub2e8\uacc4\uac00 \uc788\ub294 \uc808\ucc28\" width=\"1242\" height=\"434\" \/><\/figure>\n<p>\ubb3c\ub860 \ub9c8\ud06c\uc5c5\uc73c\ub85c \uc791\uc131\ud558\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \uadf8\ub2e4\uc9c0 \ud68d\uae30\uc801\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \uc880 \ub354 \ud601\uc2e0\uc801\uc774\uace0 \ud765\ubbf8\uc9c4\uc9c4\ud55c \ub0b4\uc6a9\uc73c\ub85c \ub118\uc5b4\uac00 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"demonstration\" class=\"wp-block-heading\">\ub370\ubaa8<\/h2>\n<p>\uc6b0\uc120, \ud2b9\uc815\ud55c \uad6c\ud604\uc774 \uc544\ub2c8\ub77c \uc811\uadfc \ubc29\uc2dd\uc744 \ubcf4\uc5ec \ub4dc\ub9ac\ub824\uace0 \ud569\ub2c8\ub2e4. \uc544\ub798 \ub370\ubaa8\ub294 \uc0ac\uc6a9\uc790 \uc9c0\uc815 XML \ub9c8\ud06c\uc5c5\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc218\ud589\ub418\uc9c0\ub9cc AsciiDoc, Markdown, reStructuredText, LaTeX\uc640 \uac19\uc740 \ub2e4\ub978 \ud615\uc2dd\uc744 HTML \ub610\ub294 .docx\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-video\"><video src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/writerside\/kotlindsl1.mp4\" controls=\"controls\" width=\"300\" height=\"150\"><\/video><\/figure>\n<h2 id=\"three-key-strengths-of-our-approach\" class=\"wp-block-heading\">\uc774 \uc811\uadfc \ubc29\uc2dd\uc774 \uac00\uc9c4 \uc138 \uac00\uc9c0 \uc8fc\uc694 \uc7a5\uc810<\/h2>\n<h3 id=\"separation-of-concerns\" class=\"wp-block-heading\">\uad00\uc2ec \ubd80\ubd84\uc758 \ubd84\ub9ac<\/h3>\n<p>\ub0b4\uc6a9\uacfc \ud45c\ud604\uc758 \ubd84\ub9ac\ub294 \uc218\uc5c6\uc774 \ub17c\uc758\ub418\uc5b4 \uc628 \uc8fc\uc81c\uc785\ub2c8\ub2e4. \uc774 \uc811\uadfc \ubc29\uc2dd\uc740 CSS \ucd08\ucc3d\uae30\ubd80\ud130 \uc6f9 \uac1c\ubc1c \ubd84\uc57c\uc5d0 \uc788\uc5b4 \uc654\uc73c\uba70, \uc774\ud6c4 \uacbd\ub7c9 \ub9c8\ud06c\uc5c5 \uc5b8\uc5b4\uc5d0\uc11c \uc7ac\ud574\uc11d\ub418\uace0 \uac15\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uae30\uc220\uc740 \ubb38\uc11c\uc758 \uc2dc\uac01\uc801 \ubc0f \ub514\uc790\uc778\uc801 \uce21\uba74\uc744 \ub0b4\uc6a9 \ubc0f \uad6c\uc870\uc640 \ubd84\ub9ac\ud558\ub294 \uac83\uacfc \uad00\ub828\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\uc2dd\uc73c\ub85c \ub77c\uc774\ud130\ub294 \ud45c\ud604\uc744 \uc27d\uac8c \uc870\uc815\ud558\uba74\uc11c \ub0b4\uc6a9\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc5ec\uae30\uc5d0\uc11c \ub354 \ub098\uc544\uac00 \ud45c\ud604\uc5d0\uc11c \ub370\uc774\ud130\ub97c \ubd84\ub9ac\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc124\uba85\ub418\ub294 \ub0b4\uc6a9\uacfc \uc9c1\uc811\uc801\uc778 \uad00\ub828\uc774 \uc5c6\ub294 \ub9c8\ud06c\uc5c5\uc73c\ub85c \uc138\uc0c1\uc744 \uc124\uba85\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, \ub370\uc774\ud130 \uc790\uccb4\ub97c \uae30\ubc18\uc73c\ub85c \ubb38\uc11c\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub7f0\ud0c0\uc784\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc628 \ub2e4\uc74c, \ud574\ub2f9 \ud45c\ud604\uc744 \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c, \ub370\uc774\ud130 \ub514\uc790\uc778\uc5d0 \ub530\ub77c \ud45c\ud604\uc744 \uc870\uac74\ubd80\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\uc608\ub97c \ub4e4\uc5b4, \uba54\uc11c\ub4dc \uc124\uba85\uc5d0 \ud574\ub2f9 \uba54\uc11c\ub4dc\uac00 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uac83\uc73c\ub85c \ud45c\uc2dc\ub41c \uacbd\uc6b0, \uc774\ub97c \uacbd\uace0 \uc694\uc18c\ub85c \uc804\ud658\ud569\ub2c8\ub2e4. \ub2e4\ub978 \uacbd\uc6b0\uc5d0\ub294 \ub2e8\ub77d\uc73c\ub85c \ubc14\uafc9\ub2c8\ub2e4.<\/p>\n<p>\ucf54\ub4dc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\">val descriptionTag = if (method.description.contains(\"DEPRECATED\")) \"warning\" else \"p\"\nxml(\n   \"\"\"<\/pre>\n<p>Method type: <b><span style=\"color: $font;\">${method.type.uppercase()}<\/span><\/b><\/p>\n<pre class=\"EnlighterJSRAW\">    \n        \n            ${method.description}\n        \n    \n   \"\"\"\n)<\/pre>\n<h3 id=\"docs-as-code-on-a-whole-new-level\" class=\"wp-block-heading\">\uc644\uc804\ud788 \uc0c8\ub85c\uc6b4 \ucc28\uc6d0\uc758 Docs-as-Code<\/h3>\n<p>\uc885\uc885 \ubb38\uc11c\ub97c \ucf54\ub4dc\ub85c \ucde8\uae09\ud558\ub294 \uac83\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud560 \ub54c, \uc774\ub294 \ubcf4\ud1b5 \uac00\ubcbc\uc6b4 \ub9c8\ud06c\uc5c5 \uc791\uc131, \ubb38\uc11c\uc758 \ubc84\uc804 \uad00\ub9ac, \ucf54\ub4dc \uac80\ud1a0 \ubc0f linter \uc0ac\uc6a9\uacfc \uac19\uc740 \uc81c\ud55c\ub41c \ubc94\uc704\uc758 \ub3c4\uad6c\uc640 \uc791\uc5c5\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uac1c\ubc1c \ucabd\uc5d0\uc11c \uac00\uc838\uc62c \uc218 \uc788\ub294 \ubd80\ubd84\uc740 \ud6e8\uc52c \ub354 \ub9ce\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin DSL\uc744 \uc0ac\uc6a9\ud558\uba74 \ubb38\uc11c\uac00 \ucf54\ub4dc\uc640 \ub3d9\uc758\uc5b4\uac00 \ub418\uc5b4, \ub77c\uc774\ud130\uac00 \uac1c\ubc1c\uc790\ub4e4\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uba87 \uac00\uc9c0 \ubc29\uc2dd\uc744 \ubcf4\uc790\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ub0b4\uc6a9\uc758 \ud2b9\uc815 \ubd80\ubd84\uc744 \ubaa8\ub4c8\ub85c \ub9cc\ub4e0 \ub2e4\uc74c, \ub2e4\uc591\ud55c \ubb38\uc11c \uc138\ud2b8\uc5d0 \uc885\uc18d\uc131\uc73c\ub85c \uac00\uc838\uc635\ub2c8\ub2e4(\uc608: \uc77c\ubd80 \ud504\ub7f0\ud2b8\uc5d4\ub4dc \uad6c\uc131 \uc694\uc18c \ub610\ub294 \uc800\uc791\uad8c\uc774\ub098 \ub77c\uc774\uc120\uc2a4 \uacc4\uc57d\uacfc \uac19\uc740 \ubc95\uc801 \uc815\ubcf4).<\/li>\n<li>\ud504\ub85c\uadf8\ub798\ubc0d\uc5d0\uc11c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Function_composition_(computer_science)\" target=\"_blank\" rel=\"noreferrer noopener\">\ud568\uc218 \ud569\uc131(function composition)<\/a>\uc744 \uc0ac\uc6a9\ud558\uba74 \ubcf5\uc7a1\ud55c \ub9c8\ud06c\uc5c5 \uad6c\uc870\uc640 \ud328\ud134\uc744 \ub354 \ub2e8\uc21c\ud55c \ub2e8\uc704\ub85c \ubd84\ud574\ud558\uc5ec \uc18c\uc2a4\ub97c \ub354 \uc138\ubd84\ud654\ud558\uace0 \uc720\uc9c0 \uad00\ub9ac\uc640 \uc7ac\uc0ac\uc6a9\ud558\uae30 \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\uc758\ubbf8\ub860 \ubc0f \ud504\ub7f0\ud2b8\uc5d4\ub4dc \uad6c\uc131 \uc694\uc18c\ub97c \ud0c0\uc785\uc73c\ub85c \ucde8\uae09\ud558\uba74 \ud544\uc694\ud55c \ubd80\ubd84\uc5d0\uc11c \uac1d\uccb4 \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc774\uc810\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h3 id=\"extensibility\" class=\"wp-block-heading\">\ud655\uc7a5\uc131<\/h3>\n<p>DSL\uc758 \ud655\uc7a5\uc131\uc740 \ud601\uc2e0\uc801\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc694\uc18c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc744 \ubfd0\ub9cc \uc544\ub2c8\ub77c DSL \uc790\uccb4\ub97c \uc218\uc815\ud560 \uc218\ub3c4 \uc788\uc5b4 \ubb34\ud55c\ud55c \uac00\ub2a5\uc131\uc774 \uc5f4\ub9bd\ub2c8\ub2e4.<\/p>\n<p>\uc0c1\uc0c1\ub825\ub9cc\uc774 \ud55c\uacc4\ub97c \uc9d3\uc2b5\ub2c8\ub2e4. \ucef4\ud4e8\ud130\uc5d0\uc11c \uac00\ub2a5\ud55c \uac83\uc740 \ubb34\uc5c7\uc774\ub4e0 \ubb38\uc11c\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4!<\/p>\n<p>\uae30\uc874 JVM \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640\uc758 \uc6d0\ud65c\ud55c \ud1b5\ud569 \ub355\ubd84\uc5d0 \ub370\uc774\ud130 \uc18c\uc2a4\ub97c \ud1b5\ud569\ud558\uace0, \ub0b4\uc6a9\uc744 \ubd84\uc11d \ubc0f \ubcf4\uc644\ud558\uba70, Selenium \ubc0f Cucumber\uc640 \uac19\uc740 \uc678\ubd80 \ub3c4\uad6c \ubc0f \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ud1b5\ud569\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin DSL\ub85c \uac00\ub2a5\ud55c \ud655\uc7a5\uc758 \uba87 \uac00\uc9c0 \uc608\ub97c \ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>XML, JSON, YAML, \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc9c1\ub82c\ud654 \ud615\uc2dd, \uc2ec\uc9c0\uc5b4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub7f0\ud0c0\uc784\uc758 \uac1d\uccb4\ub97c \ud3ec\ud568\ud55c \ubaa8\ub4e0 \ub370\uc774\ud130 \ud615\uc2dd\uc744 \ubd84\uc11d\ud558\uace0 \ud1b5\ud569\ud569\ub2c8\ub2e4.<\/li>\n<li>\ub9e4\ud551\uc744 \ucd94\uac00\ud558\uace0 \ucd94\uac00 \ub0b4\uc6a9\uc73c\ub85c \ubb38\uc11c\ub97c \ubcf4\uc644\ud569\ub2c8\ub2e4.<\/li>\n<li><a href=\"https:\/\/github.com\/qaware\/readability-analysis-tool\" target=\"_blank\" rel=\"noreferrer noopener\">\uac00\ub3c5\uc131 \ubd84\uc11d \ub3c4\uad6c<\/a> \ubc0f <a href=\"https:\/\/opennlp.apache.org\" target=\"_blank\" rel=\"noopener\">Apache OpenNLP<\/a>\uc640 \uac19\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc790\uc5f0\uc5b4\ub97c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc790\ub3d9 \uc0dd\uc131\ub41c \ubd80\ubd84\uc5d0 \ud14c\uc2a4\ud2b8 \ubc0f \uc5b4\uc124\uc158\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2 id=\"why-kotlin\" class=\"wp-block-heading\">Kotlin\uc758 \uac15\uc810<\/h2>\n<p>\ucf54\ub4dc\uc5d0\uc11c HTML\uc744 \uc0dd\uc131\ud558\ub824\ub294 \uc2dc\ub3c4\ub294 \uc774\uc804\uc5d0\ub3c4 \uc788\uc5c8\ub358 \ub9cc\ud07c, \ubb38\uc11c \uc6a9\ub3c4\ub85c Kotlin\uc744 \uc120\ud0dd\ud55c \uc774\uc720\uac00 \uad81\uae08\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc6b0\uc120, Kotlin\uc5d0\ub294 Kotlin\ub97c \uae30\ubc18\uc73c\ub85c \uac15\ub825\ud55c DSL\uc744 \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub294 \uace0\uae09 \uae30\ub2a5\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub458\uc9f8, Kotlin\uc740 \uc2e4\uc6a9\uc131\uacfc \ucd08\ubcf4\uc790 \uce5c\ud654\uc801\uc778 \ud2b9\uc131\uc73c\ub85c \uc798 \uc54c\ub824\uc838 \uc788\uc2b5\ub2c8\ub2e4. Kotlin\uc740 \ucd08\ubcf4\uc790\ub3c4 \ube60\ub974\uace0 \uc27d\uac8c \uc5b8\uc5b4\ub97c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc77c\uc0c1 \uc791\uc5c5\uc744 \ub2e8\uc21c\ud654\ud558\ub294 \uac83\uc744 \uc6d0\uce59\uc73c\ub85c \uc0bc\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4 \ucd08\ubcf4\uc790\uac00 Kotlin\uc73c\ub85c \uae30\ubcf8\uc801\uc778 &#8216;Hello, World!&#8217; \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc791\uc131\ud560 \ub54c \uc774\ud574\ud558\uc9c0 \ubabb\ud558\ub294 \uac1c\ub150\uacfc \ud0a4\uc6cc\ub4dc\ub85c \uc791\uc5c5\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 Kotlin\uacfc Java\ub85c \uc791\uc131\ud55c \ub3d9\uc77c\ud55c &#8216;Hello, World!&#8217; \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ube44\uad50\ud55c \uc608\uc785\ub2c8\ub2e4.<\/p>\n<p>Java:<\/p>\n<pre class=\"EnlighterJSRAW\">public class HelloWorld {\n    public static void main(String[] args) {\n        System.out.println(\"Hello, World!\");\n    }\n}<\/pre>\n<p>Kotlin:<\/p>\n<pre class=\"EnlighterJSRAW\">fun main() = println(\"Hello, World!\")<\/pre>\n<p>Kotlin\uc5d0\uc11c\ub294 \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uac70\ub098 public static void \uc2dc\uadf8\ub2c8\ucc98\ub97c \uc0ac\uc6a9\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. main() \ud568\uc218\uac00 \uc9c4\uc785\uc810 \uc5ed\ud560\uc744 \ud558\uba70, println()\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud558\uc5ec \uc6d0\ud558\ub294 \uba54\uc2dc\uc9c0\ub97c \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Kotlin\uc758 \uc8fc\uc694 \uc774\uc810 \uc911 \ud558\ub098\uc778 \uc774\ub7ec\ud55c \ub2e8\uc21c\uc131 \ub355\ubd84\uc5d0 \uae30\ubcf8\uc801\uc778 \ud504\ub85c\uadf8\ub7a8\uc744 \ub354 \uc27d\uace0 \uc990\uac81\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc55e\uc5d0\uc11c \uc5b8\uae09\ud588\ub4ef\uc774 Kotlin\uc740 JVM \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uacfc \uc6d0\ud65c\ud558\uac8c \ud1b5\ud569\ub429\ub2c8\ub2e4. Java\ub294 30\uc8fc\ub144\uc744 \ub9de\uc774\ud560 \uc815\ub3c4\ub85c \uc624\ub798\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 \uadf8\ub3d9\uc548 \ub9cc\ub4e4\uc5b4\uc9c4 \uc720\uc6a9\ud55c \ub3c4\uad6c\uc640 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub3c4 \uc5c4\uccad\ub098\uac8c \ub9ce\uc2b5\ub2c8\ub2e4. \ube4c\ub4dc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0 \ud55c \uc904\ub9cc \ucd94\uac00\ud574\ub3c4 \uc774\ub7ec\ud55c \ub3c4\uad6c\ub97c \uc6cc\ud06c\ud50c\ub85c\uc5d0 \ud1b5\ud569\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Kotlin\uc744 \uc120\ud0dd\ud55c\ub2e4\ub294 \uac83\uc740 \ub2e8\uc21c\ud568\uacfc \uac15\ub825\ud55c \uae30\ub2a5\uc774 \uc798 \uc870\ud654\ub97c \uc774\ub8e8\uc5b4 \uac1c\ubc1c\uc790\uac00 \uc990\uac81\uace0 \ud6a8\uc728\uc801\uc73c\ub85c \uc791\uc5c5\ud560 \uc218 \uc788\ub294 \uc5b8\uc5b4\uc5d0 \uc911\uc810\uc744 \ub454\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2 id=\"do-i-need-to-be-a-coder-to-use-the-kotlin-dsl\" class=\"wp-block-heading\">Kotlin DSL\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ucf54\ub354\uac00 \ub418\uc5b4\uc57c \ud558\ub098\uc694?<\/h2>\n<p>\ub77c\uc774\ud130\ub4e4\uc774 \uc774\ub807\uac8c \ub9d0\ud558\ub294 \uac83\uc744 \uc885\uc885 \ub4e3\uc2b5\ub2c8\ub2e4. &#8220;\uc800\ub294 \uac1c\ubc1c\uc790\ub098 \uc288\ud37c \uae30\uc220\uc790\uac00 \uc544\ub2cc \ud3c9\ubc94\ud55c \ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130\uc785\ub2c8\ub2e4! \uc774\uac83\uc744 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub098\uc694? \ud65c\uc6a9\ud558\ub824\uba74 \uc5b4\ub290 \uc815\ub3c4\uc758 \ud504\ub85c\uadf8\ub798\ubc0d \ub2a5\ub825\uc774 \ud544\uc694\ud55c\uac00\uc694?\u201d<\/p>\n<p>DSL \uc694\uc18c\ub97c \ub9c8\ud06c\uc5c5\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ub370\uc5d0\ub294 \ucf54\ub529 \uae30\uc220\uc774 \uc804\ud600 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\uba70 DSL\uc774 \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \uc54c \ud544\uc694\ub3c4 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc77c\ubd80 \uc790\ub3d9\ud654\uc640 \uad00\ub828\ub41c \uc791\uc5c5\uc774 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub9cc Kotlin\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \uc774\ud574\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. JetBrains Academy\uc758 <a href=\"https:\/\/hyperskill.org\/tracks\/18\" target=\"_blank\" rel=\"noreferrer noopener\">Kotlin Core<\/a> \uacfc\uc815\uc774\uba74 \uc5ec\ub7ec\ubd84\uc774 \uc54c\uc544\uc57c \ud560 \uc9c0\uc2dd\uc744 \ucda9\ubd84\ud788 \uc2b5\ub4dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubb3c\ub860, \ucc98\uc74c\uc5d0 Kotlin DSL \ud559\uc2b5\uc5d0 \ud22c\uc790\ud558\uba74 \uc7a5\uae30\uc801\uc73c\ub85c \ubcf4\ud0ec\uc774 \ub420 \uac83\uc73c\ub85c \uc0dd\uac01\ud569\ub2c8\ub2e4. \uc9c1\uad00\uc801\uc778 \uad6c\ubb38\uacfc IDE \uc9c0\uc6d0\uc744 \ud1b5\ud574 \ub77c\uc774\ud130\ub4e4\uc740 \ube60\ub974\uac8c \ub2a5\uc219\ud574\uc9c0\uace0 \uac15\ub825\ud55c \ubb38\uc11c \ub3c4\uad6c\uc758 \uc774\uc810\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\uac8c \ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc811\uadfc \ubc29\uc2dd\uc744 \ubb38\uc11c \uc6cc\ud06c\ud50c\ub85c\uc5d0 \ud1b5\ud569\ud558\uae30 \uc704\ud574 \uc57d\uac04\uc758 \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ubc30\uc6cc\uc57c \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. Kotlin DSL\uc744 \uc791\uc5c5\uc5d0 \ud1b5\ud569\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ud574\ub2f9 \ubb38\uc11c \uc791\uc5c5\uc5d0 \ub9de\ucda4\ud654\ub41c \ubc29\uc2dd\uc73c\ub85c \uc2e4\uc6a9\uc801\uc774\uace0 \ud765\ubbf8\ub86d\uac8c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ubc30\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uca0c\ub4e0 \ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130\uc5d0\uac8c\ub294 \uac00\uc0c1 \uc218\uc5c5\uc5d0\uc11c \uc810\uc218\ub97c \uacc4\uc0b0\ud558\uac70\ub098 \uae30\ubcf8 \uacc4\uc0b0\uae30\ub97c \ub9cc\ub4dc\ub294 \uac83\uacfc \uac19\uc740 \uc778\uc704\uc801\uc778 \uc5f0\uc2b5\ubcf4\ub2e4 \ubb38\uc11c\uc640 \uad00\ub828\ub41c \uc791\uc5c5\uc774 \ub354 \uc990\uac70\uc6b8 \ud14c\ub2c8\uae4c\uc694. \ub610\ud55c Kotlin\uc744 \ubc30\uc6b0\uba74 \ub2e4\ub978 \uc5b8\uc5b4\uc640 \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \uc774\ud574\ud558\ub294 \ub370\ub3c4 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc811\uadfc \ubc29\uc2dd\uc774 \ubaa8\ub4e0 \ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130\uc758 \uacf5\uac10\uc744 \uc5bb\uc9c0 \ubabb\ud560 \uc218\ub294 \uc788\uc9c0\ub9cc \uac1c\ubc1c\uc790 \ub3c4\uad6c\uc5d0 \ub300\ud55c \ubb38\uc11c\ub97c \uc791\uc131\ud558\ub294 \uc0ac\ub78c\ub4e4\uc5d0\uac8c\ub294 \uae30\uc220\uc744 \ud5a5\uc0c1\uc2dc\ud0a4\ub294 \uadc0\uc911\ud55c \ubc29\ubc95\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 id=\"conclusion\" class=\"wp-block-heading\">\uacb0\ub860<\/h2>\n<p>\ubb38\uc11c\uc6a9 Kotlin DSL\uc740 \ud328\ub7ec\ub2e4\uc784\uc758 \uc804\ud658\uc744 \ub3c4\uc785\ud558\uc5ec \ud14c\ud06c\ub2c8\uceec \ub77c\uc774\ud130\uac00 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc758 \uac15\ub825\ud55c \uae30\ub2a5\uc73c\ub85c \ub9e4\ub825\uc801\uc778 \ub0b4\uc6a9\uc744 \uc27d\uac8c \uc791\uc131\ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. Kotlin\uc758 \uc7a5\uc810, IDE \uc9c0\uc6d0 \ubc0f DSL \uace0\uc720\uc758 \ud655\uc7a5\uc131\uc744 \ud65c\uc6a9\ud558\uba74 \ubb38\uc11c\ub294 \ud398\uc774\uc9c0\uc5d0 \uc801\ud78c \ub2e8\uc21c\ud55c \ub2e8\uc5b4 \uadf8 \uc774\uc0c1\uc758 \uac00\uce58\ub97c \uc9c0\ub2c8\uac8c \ub429\ub2c8\ub2e4. \uc774\ub294 \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\uc5d0 \uc5ed\ub3d9\uc801\uc73c\ub85c \ub179\uc544\ub4e4\uc5b4 \ud611\uc5c5\uc744 \uac15\ud654\ud558\uace0 \ud0c1\uc6d4\ud55c \uacb0\uacfc\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub807\ub2e4\uba74 \uc790\uc2e0\uc758 \ubb38\uc11c \uc694\uad6c \uc0ac\ud56d\uc744 \ud574\uacb0\ud558\uae30 \uc704\ud574 Kotlin DSL\uc758 \uac00\ub2a5\uc131\uc744 \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc740 \uc5b4\ub5a8\uae4c\uc694?\u00a0<\/p>\n<p class=\"has-black-color has-white-background-color has-text-color has-background\"><strong>&#x1f680;<\/strong> <b>Kotlin DSL \uc0ac\uc6a9\uc744 \uc2dc\uc791\ud558\ub824\ub294 \ubd84\ub4e4\uc744 \uc704\ud574 <\/b><a style=\"font-weight: bold;\" href=\"https:\/\/github.com\/flounder4130\/kotlin-dsl-example\" target=\"_blank\" rel=\"noreferrer noopener\">\uc0d8\ud50c \ud504\ub85c\uc81d\ud2b8<\/a><strong>\ub97c \uc900\ube44\ud588\uc73c\ub2c8 \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc5ec \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694. \uc774\uc640 \uad00\ub828\ud558\uc5ec \uc9c8\ubb38\uc774 \uc788\ub294 \uacbd\uc6b0 <a href=\"https:\/\/go.jetbrains.com\/NDI2LVFWRC0xMTQAAAGMXoIA-_jXmw1RwVkuZVVrYsxIucJ8CDeRLQ3xa8dwvr2tubcj_K_sGqTy_yUqGEeW6xYRnwg=\" target=\"_blank\" rel=\"noreferrer noopener\">Slack<\/a>\uc5d0 \ub9c8\ub828\ud55c \uc804\uc6a9 \ucc44\ub110\uc778 #kotlin-dsl-for-docs\uc5d0 \uae00\uc744 \ub0a8\uaca8\uc8fc\uc138\uc694.<\/strong><\/p>\n<p>\ucf54\ub4dc\uac00 \uac00\uc9c4 \ud798\uc744 \uc774\uc6a9\ud574 \ubb38\uc11c\ub97c \uc0c8\ub85c\uc6b4 \ucc28\uc6d0\uc73c\ub85c \ub04c\uc5b4 \uc62c\ub9ac\uc138\uc694.<\/p>\n<p>\uc990\uac81\uac8c \ubb38\uc11c\ub97c \uc791\uc131\ud558\uace0 \ucf54\ub529\ud558\uc138\uc694!<\/p>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":964,"featured_media":377207,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[],"cross-post-tag":[6355],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/writerside\/397327"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/writerside"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/writerside"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=397327"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/writerside\/397327\/revisions"}],"predecessor-version":[{"id":623323,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/writerside\/397327\/revisions\/623323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/377207"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=397327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=397327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=397327"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=397327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}