{"id":1096,"date":"2026-05-31T01:53:07","date_gmt":"2026-05-30T16:53:07","guid":{"rendered":"https:\/\/nangchang.nes.or.kr\/?p=1096"},"modified":"2026-05-31T01:53:07","modified_gmt":"2026-05-30T16:53:07","slug":"10%ed%8e%b8-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c%ea%b3%bc-%ec%a0%9c%eb%84%a4%eb%a6%ad-swift%ec%9d%98-%eb%8b%a4%ed%98%95%ec%84%b1-1%eb%b6%80-%ec%99%84%ea%b2%b0","status":"publish","type":"post","link":"https:\/\/nangchang.nes.or.kr\/?p=1096","title":{"rendered":"[10\ud3b8] \ud504\ub85c\ud1a0\ucf5c\uacfc \uc81c\ub124\ub9ad \u2014 Swift\uc758 \ub2e4\ud615\uc131 (1\ubd80 \uc644\uacb0)"},"content":{"rendered":"<blockquote>\n<p>\ud83e\udd16 \uc774 \uae00\uc740 <a href=\"https:\/\/claude.ai\/claude-code\">Claude Code<\/a>(AI)\uac00 \uc791\uc131\ud569\ub2c8\ub2e4. | <a href=\"https:\/\/nangchang.nes.or.kr\/?p=1085\">\uc2dc\ub9ac\uc988 \ubaa9\ucc28<\/a> | \uc774\uc804: <a href=\"https:\/\/nangchang.nes.or.kr\/?p=1095\">9\ud3b8<\/a><\/p>\n<\/blockquote>\n<p>1\ubd80\uc758 \ub9c8\uc9c0\ub9c9 \ud3b8\uc785\ub2c8\ub2e4. \ud504\ub85c\ud1a0\ucf5c\uacfc \uc81c\ub124\ub9ad\uc740 Swift\uc5d0\uc11c &#8220;\uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ucf54\ub4dc&#8221;\ub97c \ub9cc\ub4dc\ub294 \ub450 \ucd95\uc785\ub2c8\ub2e4. \ud074\ub798\uc2a4 \uc0c1\uc18d \uc5c6\uc774\ub3c4 \ub2e4\ud615\uc131\uc744 \uad6c\ud604\ud560 \uc218 \uc788\uace0, \ud0c0\uc785\uc744 \ubab0\ub77c\ub3c4 \ub3d9\uc791\ud558\ub294 \ud568\uc218\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Swift \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 SwiftUI \uc804\uccb4\uac00 \uc774 \ub450 \uac1c\ub150 \uc704\uc5d0\uc11c \ub3cc\uc544\uac11\ub2c8\ub2e4.<\/p>\n<hr \/>\n<h2>\ud504\ub85c\ud1a0\ucf5c\uc774\ub780<\/h2>\n<p>\ud504\ub85c\ud1a0\ucf5c\uc740 &#8220;\uc774 \ud0c0\uc785\uc740 \uc774\ub7f0 \uae30\ub2a5\uc744 \uac16\uace0 \uc788\ub2e4&#8221;\ub294 <strong>\uacc4\uc57d<\/strong>\uc785\ub2c8\ub2e4. Java\ub098 Kotlin\uc758 \uc778\ud130\ud398\uc774\uc2a4\uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc, \uae30\ubcf8 \uad6c\ud604\uc744 \uc81c\uacf5\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c \ub354 \uac15\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre><code>protocol Greetable {\n    var name: String { get }\n    func greet() -> String\n}\n\nstruct User: Greetable {\n    var name: String\n\n    func greet() -> String {\n        return \"\uc548\ub155\ud558\uc138\uc694, \\(name)\uc785\ub2c8\ub2e4\"\n    }\n}\n\nstruct Bot: Greetable {\n    var name: String\n\n    func greet() -> String {\n        return \"\uc800\ub294 \ubd07 \\(name)\uc785\ub2c8\ub2e4\"\n    }\n}\n\nlet things: [any Greetable] = [User(name: \"\ucca0\uc218\"), Bot(name: \"Jarvis\")]\nfor thing in things {\n    print(thing.greet())\n}\n\/\/ \uc548\ub155\ud558\uc138\uc694, \ucca0\uc218\uc785\ub2c8\ub2e4\n\/\/ \uc800\ub294 \ubd07 Jarvis\uc785\ub2c8\ub2e4\n<\/code><\/pre>\n<p>\ud074\ub798\uc2a4\ubfd0 \uc544\ub2c8\ub77c \uad6c\uc870\uccb4\uc640 \uc5f4\uac70\ud615\ub3c4 \ud504\ub85c\ud1a0\ucf5c\uc744 \ucc44\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc774 Swift\uac00 \ud074\ub798\uc2a4 \uc0c1\uc18d\uc5d0 \ub35c \uc758\uc874\ud558\ub294 \uc774\uc720 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.<\/p>\n<hr \/>\n<h2>\ud504\ub85c\ud1a0\ucf5c \uc775\uc2a4\ud150\uc158 \u2014 \uae30\ubcf8 \uad6c\ud604 \uc81c\uacf5<\/h2>\n<p>\ud504\ub85c\ud1a0\ucf5c\uc5d0 \uae30\ubcf8 \uad6c\ud604\uc744 \ubd99\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucc44\ud0dd\ud55c \ud0c0\uc785\uc774 \uad6c\ud604\ud558\uc9c0 \uc54a\uc73c\uba74 \uae30\ubcf8 \uad6c\ud604\uc774 \uc4f0\uc785\ub2c8\ub2e4.<\/p>\n<pre><code>protocol Greetable {\n    var name: String { get }\n    func greet() -> String\n}\n\nextension Greetable {\n    func greet() -> String {       \/\/ \uae30\ubcf8 \uad6c\ud604\n        return \"\uc548\ub155\ud558\uc138\uc694, \\(name)\"\n    }\n}\n\nstruct Guest: Greetable {\n    var name: String\n    \/\/ greet()\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub428 \u2014 \uae30\ubcf8 \uad6c\ud604 \uc0ac\uc6a9\n}\n\nprint(Guest(name: \"\ubc29\ubb38\uc790\").greet())  \/\/ \uc548\ub155\ud558\uc138\uc694, \ubc29\ubb38\uc790\n<\/code><\/pre>\n<p>\uc774 \ud328\ud134\uc744 <strong>\ud504\ub85c\ud1a0\ucf5c \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d(Protocol-Oriented Programming)<\/strong>\uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \uacf5\ud1b5 \ub3d9\uc791\uc744 \ud074\ub798\uc2a4 \uacc4\uce35 \uc5c6\uc774 \ud504\ub85c\ud1a0\ucf5c \uc775\uc2a4\ud150\uc158\uc73c\ub85c \ubc30\ud3ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<hr \/>\n<h2>\uc790\uc8fc \uc4f0\ub294 \ub0b4\uc7a5 \ud504\ub85c\ud1a0\ucf5c<\/h2>\n<p>Swift \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \uc5ec\ub7ec \ud504\ub85c\ud1a0\ucf5c\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc9c1\uc811 \uad6c\ud604\ud558\uc9c0 \uc54a\uc544\ub3c4 <code>Codable<\/code>\ucc98\ub7fc \ucef4\ud30c\uc77c\ub7ec\uac00 \uc790\ub3d9\uc73c\ub85c \ud569\uc131\ud574\uc8fc\ub294 \uac83\ub4e4\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th>\ud504\ub85c\ud1a0\ucf5c<\/th>\n<th>\uc758\ubbf8<\/th>\n<th>\uc790\ub3d9 \ud569\uc131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Equatable<\/code><\/td>\n<td><code>==<\/code>\ub85c \ub3d9\ub4f1 \ube44\uad50 \uac00\ub2a5<\/td>\n<td>\uad6c\uc870\uccb4\u00b7enum\uc5d0\uc11c \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td><code>Comparable<\/code><\/td>\n<td><code>&lt;<\/code>, <code>&gt;<\/code> \ub4f1 \uc21c\uc11c \ube44\uad50 \uac00\ub2a5<\/td>\n<td>\ubd80\ubd84 \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td><code>Hashable<\/code><\/td>\n<td>Dictionary \ud0a4, Set \uc6d0\uc18c\ub85c \uc0ac\uc6a9 \uac00\ub2a5<\/td>\n<td>\uad6c\uc870\uccb4\u00b7enum\uc5d0\uc11c \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td><code>Codable<\/code><\/td>\n<td>JSON \uc9c1\ub82c\ud654\u00b7\uc5ed\uc9c1\ub82c\ud654 \uac00\ub2a5<\/td>\n<td>\ud504\ub85c\ud37c\ud2f0\uac00 \ubaa8\ub450 Codable\uc774\uba74 \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td><code>Identifiable<\/code><\/td>\n<td>\uace0\uc720 <code>id<\/code> \ud504\ub85c\ud37c\ud2f0 \ubcf4\uc720 (SwiftUI List\uc5d0\uc11c \uc0ac\uc6a9)<\/td>\n<td>\uc5c6\uc74c<\/td>\n<\/tr>\n<tr>\n<td><code>CustomStringConvertible<\/code><\/td>\n<td><code>description<\/code> \ud504\ub85c\ud37c\ud2f0\ub85c \ucd9c\ub825 \ud615\uc2dd \uc9c0\uc815<\/td>\n<td>\uc5c6\uc74c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code>struct Point: Equatable, Hashable, CustomStringConvertible {\n    var x: Int\n    var y: Int\n\n    var description: String { \"(\\(x), \\(y))\" }\n}\n\nlet a = Point(x: 1, y: 2)\nlet b = Point(x: 1, y: 2)\n\nprint(a == b)         \/\/ true (Equatable \uc790\ub3d9 \ud569\uc131)\nprint(a)              \/\/ (1, 2) (CustomStringConvertible)\n\nvar visited: Set&lt;Point&gt; = [a, b]\nprint(visited.count)  \/\/ 1 (Hashable \u2014 \uc911\ubcf5 \uc81c\uac70)\n<\/code><\/pre>\n<hr \/>\n<h2>\uc81c\ub124\ub9ad \u2014 \ud0c0\uc785\uc744 \ubab0\ub77c\ub3c4 \ub3d9\uc791\ud558\ub294 \ucf54\ub4dc<\/h2>\n<p>\uc81c\ub124\ub9ad(generics)\uc744 \uc4f0\uba74 \ud2b9\uc815 \ud0c0\uc785\uc5d0 \ubb36\uc774\uc9c0 \uc54a\uace0 \uc5b4\ub5a4 \ud0c0\uc785\uc5d0\ub3c4 \ub3d9\uc791\ud558\ub294 \ud568\uc218\ub098 \ud0c0\uc785\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>\/\/ Int \uc804\uc6a9 swap\nfunc swapInts(_ a: inout Int, _ b: inout Int) {\n    let temp = a; a = b; b = temp\n}\n\n\/\/ \uc81c\ub124\ub9ad swap \u2014 \uc5b4\ub5a4 \ud0c0\uc785\uc5d0\ub3c4 \ub3d9\uc791\nfunc swap&lt;T&gt;(_ a: inout T, _ b: inout T) {\n    let temp = a; a = b; b = temp\n}\n\nvar x = 1, y = 2\nswap(&amp;x, &amp;y)\nprint(x, y)  \/\/ 2 1\n\nvar s1 = \"hello\", s2 = \"world\"\nswap(&amp;s1, &amp;s2)\nprint(s1, s2)  \/\/ world hello\n<\/code><\/pre>\n<p><code>T<\/code>\ub294 \ud0c0\uc785 \ud50c\ub808\uc774\uc2a4\ud640\ub354\uc785\ub2c8\ub2e4. \uc2e4\uc81c \ud638\ucd9c \uc2dc Swift\uac00 \uc778\uc790 \ud0c0\uc785\uc744 \ubcf4\uace0 <code>T<\/code>\uac00 \ubb34\uc5c7\uc778\uc9c0 \ucd94\ub860\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc81c\ub124\ub9ad \ud0c0\uc785\ub3c4 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Swift\uc758 <code>Array&lt;Element&gt;<\/code>\ub098 <code>Dictionary&lt;Key, Value&gt;<\/code>\uac00 \ubaa8\ub450 \uc81c\ub124\ub9ad \ud0c0\uc785\uc785\ub2c8\ub2e4.<\/p>\n<pre><code>struct Stack&lt;Element&gt; {\n    private var items: [Element] = []\n\n    mutating func push(_ item: Element) { items.append(item) }\n    mutating func pop() -> Element? { items.popLast() }\n    var top: Element? { items.last }\n}\n\nvar intStack = Stack&lt;Int&gt;()\nintStack.push(1)\nintStack.push(2)\nprint(intStack.pop())  \/\/ Optional(2)\n\nvar stringStack = Stack&lt;String&gt;()\nstringStack.push(\"hello\")\n<\/code><\/pre>\n<hr \/>\n<h2>\ud0c0\uc785 \uc81c\uc57d \u2014 T\uc5d0 \uc870\uac74 \ubd99\uc774\uae30<\/h2>\n<p>\uc81c\ub124\ub9ad \ud0c0\uc785\uc5d0 \ud504\ub85c\ud1a0\ucf5c \uc870\uac74\uc744 \ubd99\uc774\uba74 \ud574\ub2f9 \ud504\ub85c\ud1a0\ucf5c\uc758 \uba54\uc11c\ub4dc\ub97c \ud568\uc218 \ub0b4\uc5d0\uc11c \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>\/\/ T\uac00 Comparable\uc744 \ucc44\ud0dd\ud55c \uacbd\uc6b0\uc5d0\ub9cc \uc0ac\uc6a9 \uac00\ub2a5\nfunc largest&lt;T: Comparable&gt;(in array: [T]) -> T? {\n    guard !array.isEmpty else { return nil }\n    return array.max()\n}\n\nlargest(in: [3, 1, 4, 1, 5])   \/\/ Optional(5)\nlargest(in: [\"banana\", \"apple\", \"cherry\"])  \/\/ Optional(\"cherry\")\n<\/code><\/pre>\n<p><code>where<\/code>\ub85c \ub354 \ubcf5\uc7a1\ud55c \uc870\uac74\ub3c4 \ubd99\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>func merge&lt;T&gt;(_ a: [T], _ b: [T]) -> [T] where T: Equatable {\n    return a + b.filter { !a.contains($0) }\n}\n<\/code><\/pre>\n<hr \/>\n<h2>some\uacfc any \u2014 Swift 5.7\uc758 \ud0c0\uc785 \ud45c\ud604<\/h2>\n<p>\ud504\ub85c\ud1a0\ucf5c\uc744 \ud0c0\uc785\uc73c\ub85c \uc4f8 \ub54c \ub450 \ud0a4\uc6cc\ub4dc\uc758 \ucc28\uc774\ub97c \uc54c\uc544\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><strong><code>some<\/code> (\ubd88\ud22c\uba85 \ud0c0\uc785)<\/strong> \u2014 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \ud558\ub098\uc758 \uad6c\uccb4\uc801\uc778 \ud0c0\uc785\uc73c\ub85c \uace0\uc815\ub429\ub2c8\ub2e4. \ud638\ucd9c\ud558\ub294 \ucabd\uc740 \uc815\ud655\ud55c \ud0c0\uc785\uc744 \ubab0\ub77c\ub3c4 \ub418\uc9c0\ub9cc, \ub9e4\ubc88 \uac19\uc740 \ud0c0\uc785\uc774 \ubc18\ud658\ub428\uc744 \ucef4\ud30c\uc77c\ub7ec\uac00 \uc54c\uace0 \ucd5c\uc801\ud654\ud569\ub2c8\ub2e4. SwiftUI\uc758 <code>body: some View<\/code>\uac00 \ub300\ud45c\uc801\uc785\ub2c8\ub2e4.<\/p>\n<pre><code>func makeShape() -> some Shape {\n    return Circle()  \/\/ \ud56d\uc0c1 Circle\uc744 \ubc18\ud658\n}\n<\/code><\/pre>\n<p><strong><code>any<\/code> (\uc874\uc7ac \ud0c0\uc785)<\/strong> \u2014 \ub7f0\ud0c0\uc784\uc5d0 \uc5b4\ub5a4 \ud0c0\uc785\uc774\ub4e0 \ub2f4\uc744 \uc218 \uc788\ub294 \ubc15\uc2a4\uc785\ub2c8\ub2e4. \uc720\uc5f0\ud558\uc9c0\ub9cc \uc131\ub2a5 \ube44\uc6a9\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>func describe(_ item: any Greetable) {\n    print(item.greet())  \/\/ \ub7f0\ud0c0\uc784\uc5d0 \ud0c0\uc785 \uacb0\uc815\n}\n<\/code><\/pre>\n<p>\uc9e7\uac8c \uc815\ub9ac\ud558\uba74: \ubc18\ud658 \ud0c0\uc785\uc774 \ud56d\uc0c1 \uac19\ub2e4\uba74 <code>some<\/code>, \uc5ec\ub7ec \ud0c0\uc785\uc744 \ub2f4\uc544\uc57c \ud55c\ub2e4\uba74 <code>any<\/code>.<\/p>\n<hr \/>\n<h2>\ub2e4\ub978 \uc5b8\uc5b4\uc640 \ube44\uad50<\/h2>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th>Java \/ Kotlin<\/th>\n<th>TypeScript<\/th>\n<th>Swift<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\ud504\ub85c\ud1a0\ucf5c\/\uc778\ud130\ud398\uc774\uc2a4<\/td>\n<td><code>interface<\/code><\/td>\n<td><code>interface<\/code><\/td>\n<td><code>protocol<\/code><\/td>\n<\/tr>\n<tr>\n<td>\uae30\ubcf8 \uad6c\ud604<\/td>\n<td>Java 8+ <code>default<\/code><\/td>\n<td>\uc5c6\uc74c<\/td>\n<td>\ud504\ub85c\ud1a0\ucf5c \uc775\uc2a4\ud150\uc158<\/td>\n<\/tr>\n<tr>\n<td>\uad6c\uc870\uccb4 \ucc44\ud0dd<\/td>\n<td>\ubd88\uac00 (\ud074\ub798\uc2a4\ub9cc)<\/td>\n<td>\ubd88\uac00<\/td>\n<td>\uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td>\uc81c\ub124\ub9ad<\/td>\n<td><code>&lt;T&gt;<\/code><\/td>\n<td><code>&lt;T&gt;<\/code><\/td>\n<td><code>&lt;T&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td>\ud0c0\uc785 \uc81c\uc57d<\/td>\n<td><code>&lt;T extends Comparable&gt;<\/code><\/td>\n<td><code>&lt;T extends Comparable&gt;<\/code><\/td>\n<td><code>&lt;T: Comparable&gt;<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2>\ud575\uc2ec \uc694\uc57d<\/h2>\n<ul>\n<li>\ud504\ub85c\ud1a0\ucf5c\uc740 \ud0c0\uc785\uc774 \uac16\ucdb0\uc57c \ud560 \uae30\ub2a5\uc758 \uacc4\uc57d\uc774\ub2e4. \ud074\ub798\uc2a4\u00b7\uad6c\uc870\uccb4\u00b7\uc5f4\uac70\ud615 \ubaa8\ub450 \ucc44\ud0dd\ud560 \uc218 \uc788\ub2e4.<\/li>\n<li>\ud504\ub85c\ud1a0\ucf5c \uc775\uc2a4\ud150\uc158\uc73c\ub85c \uae30\ubcf8 \uad6c\ud604\uc744 \uc81c\uacf5\ud560 \uc218 \uc788\ub2e4. \ucc44\ud0dd\ud55c \ud0c0\uc785\uc774 \uad6c\ud604\uc744 \uc0dd\ub7b5\ud558\uba74 \uae30\ubcf8 \uad6c\ud604\uc774 \uc4f0\uc778\ub2e4.<\/li>\n<li><code>Equatable<\/code>, <code>Hashable<\/code>, <code>Codable<\/code> \uac19\uc740 \ub0b4\uc7a5 \ud504\ub85c\ud1a0\ucf5c\uc740 \uad6c\uc870\uccb4\uc640 enum\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec\uac00 \uc790\ub3d9\uc73c\ub85c \uad6c\ud604\uc744 \ub9cc\ub4e4\uc5b4\uc900\ub2e4.<\/li>\n<li>\uc81c\ub124\ub9ad\uc740 \ud0c0\uc785\uc5d0 \ubb34\uad00\ud558\uac8c \ub3d9\uc791\ud558\ub294 \ud568\uc218\uc640 \ud0c0\uc785\uc744 \ub9cc\ub4e0\ub2e4. \ud0c0\uc785 \uc81c\uc57d(<code>T: Protocol<\/code>)\uc73c\ub85c \ubc94\uc704\ub97c \uc81c\ud55c\ud55c\ub2e4.<\/li>\n<li><code>some<\/code>\uc740 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uace0\uc815\ub41c \ud558\ub098\uc758 \ud0c0\uc785, <code>any<\/code>\ub294 \ub7f0\ud0c0\uc784\uc5d0 \ub2e4\uc591\ud55c \ud0c0\uc785\uc744 \ub2f4\ub294 \ubc15\uc2a4\ub2e4.<\/li>\n<\/ul>\n<hr \/>\n<h2>1\ubd80\ub97c \ub9c8\uce58\uba70<\/h2>\n<p>10\ud3b8\uc5d0 \uac78\uccd0 Swift \uc5b8\uc5b4\uc758 \uae30\ucd08\ub97c \ub2e4\ub918\uc2b5\ub2c8\ub2e4. \ubcc0\uc218\u00b7\ud0c0\uc785\u00b7\uc81c\uc5b4 \ud750\ub984\ubd80\ud130 \ud568\uc218\u00b7\ud074\ub85c\uc800\u00b7\uc635\uc154\ub110, \uadf8\ub9ac\uace0 \uad6c\uc870\uccb4\u00b7\uc5f4\uac70\ud615\u00b7\ud504\ub85c\ud1a0\ucf5c\u00b7\uc81c\ub124\ub9ad\uae4c\uc9c0. \uc774 \uac1c\ub150\ub4e4\uc774 \uc11c\ub85c \uc5b4\ub5bb\uac8c \uc5f0\uacb0\ub418\ub294\uc9c0\ub294 \uc2e4\uc81c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uba74\uc11c \uc810\uc810 \uba85\ud655\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 <strong>2\ubd80 \u2014 Swift \uace0\uae09 \uc8fc\uc81c<\/strong>\uc785\ub2c8\ub2e4. \uc5d0\ub7ec \ucc98\ub9ac, \uba54\ubaa8\ub9ac \uad00\ub9ac(ARC), Swift Concurrency(async\/await, actor)\ub97c \ub2e4\ub8f9\ub2c8\ub2e4. 1\ubd80\ubcf4\ub2e4 \ubcf5\uc7a1\ud558\uc9c0\ub9cc, \uc2e4\uc81c \uc571\uc744 \ub9cc\ub4e4 \ub54c \ubc18\ub4dc\uc2dc \ud544\uc694\ud55c \ub0b4\uc6a9\ub4e4\uc785\ub2c8\ub2e4.<\/p>\n<blockquote>\n<p>\ud83e\udd16 Generated with <a href=\"https:\/\/claude.ai\/claude-code\">Claude Code<\/a><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\ud504\ub85c\ud1a0\ucf5c\uc740 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub118\uc5b4 \uae30\ubcf8 \uad6c\ud604\uae4c\uc9c0 \uc81c\uacf5\ud55c\ub2e4. \uc81c\ub124\ub9ad\uacfc \uacb0\ud569\ud558\uba74 \ud0c0\uc785\uc5d0 \ubb34\uad00\ud558\uac8c \ub3d9\uc791\ud558\ub294 \uc7ac\uc0ac\uc6a9 \ucf54\ub4dc\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. some\uacfc any\uc758 \ucc28\uc774\ub3c4 \uc815\ub9ac\ud55c\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1096","post","type-post","status-publish","format-standard","hentry","category-1"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=\/wp\/v2\/posts\/1096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1096"}],"version-history":[{"count":0,"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=\/wp\/v2\/posts\/1096\/revisions"}],"wp:attachment":[{"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nangchang.nes.or.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}