{"id":1282,"date":"2021-11-05T19:38:08","date_gmt":"2021-11-05T10:38:08","guid":{"rendered":"https:\/\/blog.enyou.net\/ko\/?p=1282"},"modified":"2022-03-05T19:09:09","modified_gmt":"2022-03-05T10:09:09","slug":"swift%ec%97%90%ec%84%9c-c%ea%b0%80-%ec%96%b4%eb%96%bb%ea%b2%8c-%ec%82%ac%ec%9a%a9%eb%90%98%eb%a9%b0-unsafe%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80","status":"publish","type":"post","link":"https:\/\/blog.enyou.net\/ko\/archives\/1282","title":{"rendered":"Swift\ub294 \uc5b4\ub5bb\uac8c \ube4c\ub4dc\ub418\uace0, Objective-C\uc640 \uc5b4\ub5bb\uac8c \uac19\uc774 \uc4f0\uc774\ub294\uac00?"},"content":{"rendered":"\n<p>Swift\uac00 \uba54\uc778\uc774 \ub41c \uc774\ud6c4\uc5d0 iOS \uac1c\ubc1c\uc744 \uc2dc\uc791\ud55c \uc0ac\ub78c\uc73c\ub85c\uc11c, \ud56d\uc0c1 Objective-C\uc640 Swift\uac00 \ud568\uaed8 \uc4f0\uc774\ub294 \uac8c \ub2f9\uc5f0\ud558\uac8c \ub290\uaef4\uc9c0\uae30\ub3c4 \ud558\uba74\uc11c, \uc5b4\ub5bb\uac8c \uc11c\ub85c \ub2e4\ub978 \uc5b8\uc5b4\ub97c \uace0\ud1b5 \uc5c6\uc774(\uc2e0\uacbd \uc368\uc57c \ud560 \ubd80\ubd84\uc740 \uc788\uaca0\uc9c0\ub9cc\uc694.) \uc11e\uc5b4\uc11c \uc4f8 \uc218 \uc788\ub294\uc9c0 \uad81\uae08\ud588\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ubb38\uc11c\uc5d0\uc11c\ub294 \ub300\ub7b5\uc801\uc73c\ub85c \uc5b4\ub5bb\uac8c \ub450 \uc5b8\uc5b4\uac00 \uc798 \uc11e\uc5ec\uc11c \uc4f0\uc77c \uc218 \uc788\ub294\uc9c0 \ub2e4\ub904\ubcf4\ub824\uace0 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Xcode\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\uac00 \uc5b4\ub5bb\uac8c \ube4c\ub4dc \ub418\ub294\uac00?<\/h2>\n\n\n\n<p>\ub9cc\uc57d\uc5d0 Swift\uc640 Objective-C\uac00, Java\uc640 Swift\ucc98\ub7fc \uc11c\ub85c \ud638\ud658\ub418\uc9c0 \uc54a\ub294 \uc5b8\uc5b4\uc600\ub2e4\uba74 \uc9c0\uae08\uacfc\ub294 \ub2ec\ub9ac \uc11c\ub85c \uac19\uc774 \uc774\uc6a9\ud558\uae30\uac00 \ub9e4\uc6b0 \uc5b4\ub824\uc6e0\uc744 \uac83\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c, Swift\uc5d0\uc11c Java \ucf54\ub4dc\ub97c \ud638\ucd9c\ud558\ub824\uba74 (\uc2e4\uc81c\ub85c \uadf8\ub7f0 \uc2dd\uc73c\ub85c \uc774\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uac00 \uc788\ub294\uc9c0\ub294 \ubaa8\ub974\uaca0\uc9c0\ub9cc) \ubb34\uc5b8\uac00 \uc11c\ub85c \ud1b5\uc2e0\uc744 \ud558\uae30 \uc704\ud574\uc11c \uc5ec\ub7ec \ubc29\ubc95\uc73c\ub85c \uba54\ubaa8\ub9ac\uc5d0 \ud30c\uc77c\uc744 \uc4f0\uace0 \uc77d\uc5b4\uc57c \ud558\uaca0\uc9c0\uc694. \uadf8\ub7ec\ub098, Swift\uc640 Objective-C\ub294 \ub9c8\uc9c0 \ud55c \uc5b8\uc5b4\uc778 \uac83\ucc98\ub7fc \uc11c\ub85c \ud638\ud658\ud558\uc5ec \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\ub5bb\uac8c \uc774\ub7f0 \uc77c\uc774 \uc77c\uc5b4\ub0a0\uae4c\uc694? Xcode\uac00 \uc571\uc744 \ube4c\ub4dc\ud558\ub294 \uacfc\uc815\uc744 \ubcf4\uba74 \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ube4c\ub4dc\uc758 \ub2e8\uacc4<\/h3>\n\n\n\n<p>Xcode\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\ub294 Preprocessor -> Complier -> Assembler -> Linker -> Loader \uc21c\uc73c\ub85c \ube4c\ub4dc\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"1024\" src=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.20.27-750x1024.png\" alt=\"\" class=\"wp-image-1341\" srcset=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.20.27-750x1024.png 750w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.20.27-220x300.png 220w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.20.27-768x1048.png 768w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.20.27.png 970w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><figcaption>https:\/\/www.vadimbulavin.com\/xcode-build-system\/<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Preprocessor<\/h4>\n\n\n\n<p>\ucef4\ud30c\uc77c\uc744 \ud558\uae30 \uc804\uc5d0 \uc804\ucc98\ub9ac\uae30 \ub2e8\uacc4\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc804\ucc98\ub9ac\uae30 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \ud569\ub2c8\ub2e4.<\/p>\n\n\n<ul>\n<li>\ub9e4\ud06c\ub85c\ub97c \uc2e4\uc81c \uc815\uc758\ub85c \ubc14\uafbc\ub2e4. (eg. #Define \ubb38)<\/li>\n<li>\ud30c\uc77c \ucc38\uc870 \uad00\uacc4(\uc885\uc18d\uc131)\ub97c \ud30c\uc545\ud55c\ub2e4. (eg. #include <file.h>)<\/file.h><\/li>\n<li>\ucef4\ud30c\uc77c \uc870\uac74\ubb38\uc744 \ud30c\uc545\ud55c\ub2e4. (eg. #if ~, #if else, #endif)<\/li>\n<\/ul>\n\n\n<p>\uadf8\ub7ec\ub098, \uc2a4\uc704\ud504\ud2b8\ub97c \ube4c\ub4dc\ud560 \ub54c\ub294 \uc804\ucc98\ub9ac\uae30 \uc791\uc5c5\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc2a4\uc704\ud504\ud2b8\uc5d0\ub294 \ub9e4\ud06c\ub85c\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc8e0. \uadf8\ub7f0\ub370, \ub9e4\ud06c\ub85c\ub294 \uadf8\ub807\ub2e4 \uccd0\ub3c4, \ud30c\uc77c \ucc38\uc870 \uad00\uacc4\uc640 \ucef4\ud30c\uc77c \uc870\uac74\ubb38\uc740 \ud544\uc694\ud558\uae30\ub3c4 \ud558\uace0, \uc2e4\uc81c\ub85c \uc4f0\uace0 \uc788\uc796\uc544\uc694? \uc5b4\ub5bb\uac8c \ub418\ub294 \uac78\uae4c\uc694?<\/p>\n\n\n\n<p>\uba3c\uc800 \ud30c\uc77c \ucc38\uc870 \uad00\uacc4\uc5d0 \ub300\ud574\uc11c <a href=\"https:\/\/github.com\/apple\/swift-llbuild\">llbuild(low-level build system)<\/a>\uc774\ub77c\ub294 \uac83\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub9d0\uc500\ub4dc\ub838\ub2e4\uc2dc\ud53c, Objective-C\uc5d0\uc11c\ub294 \uc804\ucc98\ub9ac \ub2e8\uacc4\uac00 \uc874\uc7ac\ud558\uae30 \ub54c\ubb38\uc5d0, \ud504\ub85c\uc81d\ud2b8\ub3c4 Swift-llbuild\ub77c\uace0 \uc774\ub984\uc9c0\uc5b4\uc838 \uc788\ub124\uc694.<\/p>\n\n\n\n<p>\ub610\ud55c, \ucef4\ud30c\uc77c \uc870\uac74\ubb38\uc744 \ud30c\uc545\ud558\uae30 \uc704\ud574\uc11c Active Compilation Conditions \uacfc \uac19\uc740 \uc124\uc815\uc744 \uc2a4\uc704\ud504\ud2b8 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \ucd94\uac00\uc801\uc73c\ub85c \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"190\" src=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.34.33.png\" alt=\"\" class=\"wp-image-1342\" srcset=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.34.33.png 960w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.34.33-300x59.png 300w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-6.34.33-768x152.png 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/figure>\n\n\n\n<p> \uc704\uc640 \uac19\uc740 Build setting\uc774 \ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0 DEBUG \ud0c0\uac9f\uc77c \ub54c, #If DEBUG\uc640 \uac19\uc740 \ubb38\uad6c\ub85c \ud2b9\uc815 \ucf54\ub4dc\ub97c \uc0bd\uc785\ud560 \uc218 \uc788\uaca0\uc8e0.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Compiler<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"493\" src=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/9xGDe.png\" alt=\"\" class=\"wp-image-1340\" srcset=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/9xGDe.png 638w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/9xGDe-300x232.png 300w\" sizes=\"(max-width: 638px) 100vw, 638px\" \/><figcaption>https:\/\/stackoverflow.com\/questions\/2354725\/what-exactly-is-llvm<\/figcaption><\/figure>\n\n\n\n<p>Xcode\uc5d0\uc11c \ucef4\ud30c\uc77c\ub7ec \ub2e8\uacc4\ub294 LLVM\uc744 \uac70\uccd0\uc11c \uc2e4\ud589\ub418\uac8c \ub429\ub2c8\ub2e4. LLVM\uc740 \ud504\ub860\ud2b8\uc5d4\ub4dc->(\ubbf8\ub4e4\uc5d4\ub4dc)->\ubc31\uc5d4\ub4dc\uc758 \ub2e8\uacc4\ub97c \uac70\uccd0\uc11c \ucef4\ud30c\uc77c\uc744 \uc9c4\ud589\ud558\uac8c \ub418\ub294\ub370\uc694, Xcode\uc5d0\uc11c\ub294 LLVM\uc774 \uc5b4\uc148\ube14\ub9ac\uc5b4\ub97c \ub9cc\ub4e4 \ubaa9\uc801\ucf54\ub4dc\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574 <a href=\"https:\/\/www.swift.org\/swift-compiler\/#compiler-architecture\">Swift Complier<\/a>\uc640 <a href=\"https:\/\/clang.llvm.org\/\">Clang<\/a>\uc758 \ud504\ub860\ud2b8\uc5d4\ub4dc\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \uac00\uc9c0 \ud504\ub860\ud2b8\uc5d4\ub4dc\ub294, \uc2ec\ubcfc \ud14c\uc774\ube14\uc744 \uac00\uc9c0\uace0 \ucf54\ub4dc\uac00 \uac00\uc9c4 \uc758\ubbf8\ub97c \uc783\uc9c0 \uc54a\uc73c\uba74\uc11c LLVM\uc774 \uc5b4\uc148\ube14\ub9ac\uc5b4\ub85c \ubc88\uc5ed\uc744 \ud574\uc904 \uc911\uac04 \ucf54\ub4dc\uc778 Intermediate Representation\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc989, \uc81c\uc77c \ucc98\uc74c \uad81\uae08\ud588\ub358 \uc810\uc778, \uc5b4\ub5bb\uac8c \uc2a4\uc704\ud504\ud2b8\uc640 Objective-C\uac00 \uac1c\ubc1c\uc790 \uc785\uc7a5\uc5d0\uc11c \ubcc4 \uace0\uc0dd\uc5c6\uc774 \uc4f0\uc774\ub0d0\ub294 \uc9c8\ubb38\uc740 \uacb0\uad6d\uc5d4 \ub450 \uc5b8\uc5b4 \ubaa8\ub450 LLVM\uc744 \uc704\ud55c \uc911\uac04 \uc5b8\uc5b4\ub85c \ubcc0\ud658\ub41c \ud6c4\uc5d0, \uc2e4\uc81c \uc5b4\uc148\ube14\ub9ac\uc5b4\ub85c \ubcc0\ud658\ub418\uae30 \ub54c\ubb38\uc774\ub77c\uace0 \uc774\ud574\ud560 \uc218 \uc788\uaca0\ub124\uc694.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Swift Complier\uc758 \uacbd\uc6b0<\/h5>\n\n\n\n<p>Swift Complier \ud398\uc774\uc9c0\uc5d0 \uac01 \ucef4\ud30c\uc77c \ub2e8\uacc4\uc5d0 \ub300\ud55c \uac04\ub2e8\ud55c \uc124\uba85\uc774 \uc801\ud600\uc788\uc2b5\ub2c8\ub2e4. \ud504\ub860\ud2b8\uc5d4\ub4dc\ub2e8\uc778 Swift Compiler\uc5d0\uc11c\ub294 \ud06c\uac8c \ubcf4\uba74 \ub0b4\uac00 \uc791\uc131\ud55c Swift \ucf54\ub4dc\uac00 \ubd84\uc11d\ub418\uc5b4 Swift Intermediate Language\ub85c \ubcc0\ud658\ub418\uace0, \ub2e4\uc2dc \ud55c \ubc88, LLVM\uc758 \ucef4\ud30c\uc77c \ub300\uc0c1\uc778 LLVM IR\ub85c \ubcc0\ud658\ub418\uc5b4 \ubc31\uc5d4\ub4dc\uc5d0 \ub118\uc5b4\uac04\ub2e4\uace0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Parsing<br>\ubb38\uad6c \ubd84\uc11d\uc744 \ud1b5\ud574\uc11c \ucd94\uc0c1 \ubb38\ubc95 \ud2b8\ub9ac(AST)\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc5d0\uc11c\ub294 \ub530\ub85c \uc758\ubbf8\ub098 type\uc744 \ucd94\ucd9c\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. \uc785\ub825\uc5d0 \ub300\ud55c \ubb38\ubc95\uc801 \uacbd\uace0\ub098 \uc5d0\ub7ec\ub97c \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li>Semantic analysis<br>\uc704\uc5d0\uc11c \ud30c\uc2f1\ud55c AST\ub97c \uac00\uc9c0\uace0, \uc815\ub3c8\ub418\uace0 \ud0c0\uc785\uc774 \ud655\uc778\ub41c AST\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \uc785\ub825\uc5d0 \ub300\ud574 \uc758\ubbf8\uc801\uc778 \uacbd\uace0\ub098 \uc5d0\ub7ec\ub97c \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud0c0\uc785 \ucd94\ub860\uc744 \ud3ec\ud568\ud558\uba70, \uc774 \uacfc\uc815\uc774 \uc131\uacf5\ud558\uc600\ub2e4\ub294 \uac83\uc740 \ud0c0\uc785\uc774 \ud655\uc778\ub41c AST\uc5d0\uc11c \uc548\uc804\ud558\uac8c \ucf54\ub4dc(SIL)\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/li><li>Clang importer<br>C\uc640 Objective-C API\ub97c Swift API\uc5d0 \ub9e4\ud551\ud569\ub2c8\ub2e4. (\uc8fc: bridge\ub85c Objective-C\uc758 \ubaa8\ub4c8\uc744 \uc784\ud3ec\ud2b8\ud560 \ub54c, Swift \ud615\uc2dd\uc758 API\ub85c \uc4f8 \uc218 \uc788\uac8c \ub418\ub294 \ub370, \uc774 \uacfc\uc815\uc5d0 \uc758\ud574 \uadf8\ub807\uac8c \ub418\ub294 \uac83 \uac19\uc2b5\ub2c8\ub2e4.)<\/li><li>SIL generation<br>\ud0c0\uc785\uc774 \ud655\uc778\ub41c AST\ub85c \uc2a4\uc704\ud504\ud2b8\ub97c \uc704\ud55c \uace0\uc218\uc900\uc758 \uc911\uac04 \uc5b8\uc5b4(Swift Intermediate Language)\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. SIL\ub294 \ubd84\uc11d\uc774\ub098 \ucd5c\uc801\ud654\uc5d0 \uc801\ud569\ud55c \uc2a4\uc704\ud504\ud2b8 \ucf54\ub4dc\uc785\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/apple\/swift\/blob\/master\/docs\/SIL.rst\">https:\/\/github.com\/apple\/swift\/blob\/master\/docs\/SIL.rst<\/a><\/li><li>SIL guaranteed transformations<br>\uc774 \uacfc\uc815\uc5d0\uc11c \ud504\ub85c\uadf8\ub7a8\uc758 \uc815\ud655\uc131\uc5d0 \ub300\ud55c \ucd94\uac00\uc801\uc778 \ub370\uc774\ud130 \ud50c\ub85c\uc6b0 \uc9c4\ub2e8\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c \ud45c\uc900 SIL\uc774 \ub418\uac8c \ub429\ub2c8\ub2e4.<\/li><li>SIL Optimizations<br>SIL\uc744 \uc774\uc6a9\ud558\uc5ec Swift\ub97c \uc704\ud574 \uace0\uc218\uc900\uc5d0\uc11c \ucd5c\uc801\ud654\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4. ARC\uc640 devirtualization, Generic specialization \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4.<br>(\uc8fc: ARC\uc758 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\ub4e4 \uc544\ub294 \uac1c\ub150\uc77c \uac83 \uac19\uace0, <a href=\"https:\/\/dl.acm.org\/doi\/10.1145\/3135932.3135947\">Devirtualization<\/a>\uc740 \uc0c1\uc18d\uc5d0 \ub530\ub978 V-table \ucc38\uc870\uc5d0 \ub300\ud55c \ucd5c\uc801\ud654\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c final keyword\ub97c \uc774\uc6a9\ud558\uc5ec \ub354 \uc774\uc0c1 \uc0c1\uc18d\uc774 \ubd88\uac00\ub2a5\ud568\uc744 \uba85\uc2dc\ud558\uba74 \uc774 \uc808\ucc28\uc5d0 \uc758\ud574 \ud074\ub798\uc2a4\uc784\uc5d0\ub3c4 \ub354 \uc774\uc0c1\uc758 \uc11c\ube0c\ud074\ub798\uc2a4\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 <a href=\"https:\/\/marcofoco.com\/the-power-of-devirtualization\/\">function, variable \ub4f1\uc744 \uc9c1\uc811 \ucc38\uc870<\/a>\ud558\ub294 \ucd5c\uc801\ud654\ub97c \ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4. \ub610\ud55c, Generic spetialization\uc740 \ud504\ub85c\ud1a0\ucf5c\uc758 Witness table\uc758 \ucd5c\uc801\ud654\ub85c \ubcf4\uc785\ub2c8\ub2e4.)<\/li><li>LLVM IR Generation<br>SIL\uac00 \ubc14\ub85c \uc5b4\uc148\ube14\ub9ac\uc5b4\uac00 \ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ubc31\uc5d4\ub4dc\uc5d0 \uc904 LLVM IR\ub97c \ub9cc\ub4e4\uace0, \ucd5c\uc885 \uc5b4\uc148\ube14\ub9ac\uc5b4 \uc0dd\uc131\uc744 LLVM \ubc31\uc5d4\ub4dc\uc5d0 \uc704\uc784\ud569\ub2c8\ub2e4.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Assembler<\/h4>\n\n\n\n<p>\uc5b4\uc148\ube14\ub7ec\uc758 \uc5ed\ud560\uc740 \uc5b4\uc148\ube14\ub9ac\uc5b4\ub85c \uc791\uc131\ub41c \ucf54\ub4dc\ub97c \uae30\uacc4\uc5b4\ub85c \ubc88\uc5ed\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c Mach-O \ud30c\uc77c\uc774 \uc0dd\uc131\ub418\ub294\ub370, \uc774\ub294 \ucf54\ub4dc\uc640 \ub370\uc774\ud130\ub97c \ud3ec\ud568\ud55c Darwin \uae30\ubc18 OS(MacOS, iOS, ..)\uc758 \ubc14\uc774\ub108\ub9ac \ud30c\uc77c\uc785\ub2c8\ub2e4. \uc774\ub54c, Xcode assembler\ub294 \uc808\ub300 \uc8fc\uc18c\uc5d0 \ub300\ud55c \uae30\uacc4\uc5b4\uac00 \uc544\ub2cc, \uc0c1\ub300 \uc8fc\uc18c\ub97c \uc9c0\uc6d0\ud560 \uc218 \uc788\ub294 \uae30\uacc4\uc5b4 \ud30c\uc77c\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Linker<\/h4>\n\n\n\n<p>\ub9c1\ucee4\ub294 \ub2e4\uc591\ud55c \uac1d\uccb4 \ud30c\uc77c\uacfc \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud558\ub098\uc758 Darwin \uae30\ubc18 OS \uc5d0\uc11c \uc2e4\ud589\ub420 \uc218 \uc788\ub294 Mach-O \uc2e4\ud589\ud30c\uc77c\ub85c \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4. \uc624\ube0c\uc81d\ud2b8 \ud30c\uc77c\uc740 \uc5b4\uc148\ube14\ub7ec \uacfc\uc815\uc5d0\uc11c\uc758 \uc0b0\ubb3c\uc774\uac70\ub098 \ub2e4\uc591\ud55c \ud0c0\uc785(.dylib, .tbd, .a)\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \uc5b4\uc148\ube14\ub7ec\uc640 \ub9c1\ucee4 \ubaa8\ub450 Mach-O \ud30c\uc77c\uc744 \ub9cc\ub4dc\ub294\ub370\uc694, \ub9c1\ucee4\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc5b4\uc148\ube14\ub7ec\uac00 \ub9cc\ub4e0 Mach-O \ud30c\uc77c\uc5d0 \ub2e4\ub978 \ud30c\uc77c \ub610\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ucc38\uc870 \uad00\uacc4\uc5d0 \ub530\ub77c \ucd5c\uc885 \uacb0\ud569\uc744 \ud574\uc11c \uc644\uc131\ubcf8\uc778 Mach-O \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4\uc900\ub2e4\uace0 \ubcf4\uba74 \ub420 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Loader<\/h4>\n\n\n\n<p>\ub85c\ub354\ub294 \ube4c\ub4dc \ub2e8\uacc4\ub77c\uae30 \ubcf4\ub2e4\ub294 \uc2e4\ud589\uc758 \ub2e8\uacc4\uc778\ub370\uc694. \uc6b4\uc601\uccb4\uc81c \ub2e8\uc5d0\uc11c \ud504\ub85c\uadf8\ub7a8\uc744 \uba54\ubaa8\ub9ac\uc5d0 \uc62c\ub9ac\uace0 \ub808\uc9c0\uc2a4\ud130\ub97c \ucd08\uae30\ud654\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ub450 \uc5b8\uc5b4\ub97c \uc5b4\ub5bb\uac8c \uc11e\uc5b4\uc11c \uc4f0\ub294\uac00?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Swift\uc5d0\uc11c Objective-C \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uae30<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"731\" src=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.14.59-1024x731.png\" alt=\"\" class=\"wp-image-1361\" srcset=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.14.59-1024x731.png 1024w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.14.59-300x214.png 300w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.14.59-768x549.png 768w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.14.59.png 1498w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Swift \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c Objective-C \ud30c\uc77c\uc744 \ucd94\uac00\ud558\uac70\ub098 \ubc18\ub300\uc758 \uacbd\uc6b0\uc5d0 Objective-C \ube0c\ub9bf\uc9c0 \ud5e4\ub354\ub97c \ub9cc\ub4e4\uac70\ub0d0\uace0 \ubb3c\uc5b4\ubd05\ub2c8\ub2e4. (\ub9cc\ub4e4\uc9c0 \uc54a\uc544\ub3c4 \uc218\ub3d9\uc73c\ub85c \ub9cc\ub4e4\uace0, build setting\uc5d0\uc11c \uc124\uc815\ud574\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.) \uc774 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \ub09c \ud6c4\uc5d0, \ub0b4\uac00 \uc791\uc131\ud55c Objective-C \ud30c\uc77c \ud5e4\ub354\ub97c \ube0c\ub9bf\uc9c0 \ud5e4\ub354\uc5d0 \ucd94\uac00\ud558\uba74 \uc2a4\uc704\ud504\ud2b8\uc5d0\uc11c\ub3c4 Objective-C \ubaa8\ub4c8\uc744 \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\ube0c\ub9bf\uc9c0 \ud5e4\ub354\uc640 Swift \ucf54\ub4dc\uac00 \uac19\uc740 \ud0c0\uac9f\uc77c \uacbd\uc6b0\uc5d0 \ubcc4\ub3c4\ub85c Objective-C \ube0c\ub9bf\uc9c0 \ud5e4\ub354\ub97c \uc784\ud3ec\ud2b8\ud560 \ud544\uc694\ub294 \uc5c6\uc5b4\uc694.) (\ube0c\ub9bf\uc9c0 \ud5e4\ub354\uc5d0 \ubd88\ub7ec\uc624\uace0\uc790 \ud558\ub294 Objective-C \ud5e4\ub354\ub97c \ucd94\uac00\ud558\uc9c0 \uc54a\uc73c\uba74, Swift \ucf54\ub4dc\uc5d0\uc11c \uc54c \uc218\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.)<\/p>\n\n\n\n<p><a href=\"https:\/\/developer.apple.com\/documentation\/swift\/imported_c_and_objective-c_apis\/importing_objective-c_into_swift\">Importing Objective-C into Swift<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objective-C\uc5d0\uc11c Swift \ubaa8\ub4c8 \uc0ac\uc6a9\ud558\uae30<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"145\" src=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.02.46-1024x145.png\" alt=\"\" class=\"wp-image-1355\" srcset=\"https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.02.46-1024x145.png 1024w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.02.46-300x43.png 300w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.02.46-768x109.png 768w, https:\/\/blog.enyou.net\/wp-content\/uploads\/2022\/01\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2022-01-23-\u110b\u1169\u1112\u116e-9.02.46.png 1058w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Xcode\uc758 \ud0c0\uac9f\uc758 Build Setting\uc5d0\uc11c Objective-C GeneratedInterface Header Name\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2a4\uc704\ud504\ud2b8 \ubaa8\ub4c8\ub4e4\uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 Objective-C\uc5d0\uc11c \uc4f0\uc77c \uc218 \uc788\ub3c4\ub85d \ud5e4\ub354\ub85c \uc791\uc131\uc774 \ub418\uace0, \uc6d0\ud558\ub294 Objective-C \ud30c\uc77c\uc5d0\uc11c \ud574\ub2f9 \ud30c\uc77c\uc744 import \ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4. (\ud0c0\uac9f\uc758 \ud574\ub2f9 \ud30c\uc77c\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uad00\ub9ac\ub418\ub2c8\uae4c, swift \ud30c\uc77c\ub9c8\ub2e4 \ud5e4\ub354\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub124\uc694!)<\/p>\n\n\n\n<p>\ub610\ud55c \uac19\uc740 \ud0c0\uac9f \uc548\uc5d0\uc11c, Objective-C \ud5e4\ub354\uc5d0 Swift \ucf54\ub4dc\uc758 \ud074\ub798\uc2a4\ub098 \ud504\ub85c\ud1a0\ucf5c\uc744 \uc774\uc6a9\ud560 \uacbd\uc6b0 \uc21c\ud658 \ucc38\uc870\uac00 \uc0dd\uae30\uac8c \ub418\uc5b4 Forward Declarations\uc73c\ub85c @\ud074\ub798\uc2a4\uba85, @\ud504\ub85c\ud1a0\ucf5c\uba85\uacfc \uac19\uc774 \uba3c\uc800 \uc120\uc5b8\uc744 \ud574\uc8fc\uc5b4\uc57c \ud55c\ub2e4\uace0 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/developer.apple.com\/documentation\/swift\/imported_c_and_objective-c_apis\/importing_swift_into_objective-c\">Importing Swift into Objective-C<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ucc38\uace0\uc790\ub8cc<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.vadimbulavin.com\/xcode-build-system\/\">Xcode build system<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/zeddios.tistory.com\/908\">Mach-O<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.python.org\/ko\/3\/extending\/extending.html\">C\ub098 C++\ub85c \ud30c\uc774\uc36c \ud655\uc7a5\ud558\uae30<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/ko.wikipedia.org\/wiki\/%EB%A7%88%EC%83%AC%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)\">\ub9c8\uc0ec\ub9c1 (\ucef4\ud4e8\ud130 \uacfc\ud559) &#8211; \uc704\ud0a4\ubc31\uacfc, \uc6b0\ub9ac \ubaa8\ub450\uc758 \ubc31\uacfc\uc0ac\uc804<\/a><\/p>\n\n\n\n<p>\uc5c5\ub370\uc774\ud2b8 \uc911<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Swift\uac00 \uba54\uc778\uc774 \ub41c \uc774\ud6c4\uc5d0 iOS \uac1c\ubc1c\uc744 \uc2dc\uc791\ud55c \uc0ac\ub78c\uc73c\ub85c\uc11c, \ud56d\uc0c1 Objective-C\uc640 Swift\uac00 \ud568\uaed8 \uc4f0\uc774\ub294 \uac8c \ub2f9\uc5f0\ud558\uac8c \ub290\uaef4\uc9c0\uae30\ub3c4 \ud558\uba74\uc11c, \uc5b4\ub5bb\uac8c \uc11c\ub85c \ub2e4\ub978 \uc5b8\uc5b4\ub97c \uace0\ud1b5 \uc5c6\uc774(\uc2e0\uacbd \uc368\uc57c \ud560 \ubd80\ubd84\uc740 \uc788\uaca0\uc9c0\ub9cc\uc694.) \uc11e\uc5b4\uc11c \uc4f8 \uc218 \uc788\ub294\uc9c0 \uad81\uae08\ud588\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ubb38\uc11c\uc5d0\uc11c\ub294 \ub300\ub7b5\uc801\uc73c\ub85c \uc5b4\ub5bb\uac8c \ub450 \uc5b8\uc5b4\uac00 \uc798 \uc11e\uc5ec\uc11c \uc4f0\uc77c \uc218 \uc788\ub294\uc9c0 \ub2e4\ub904\ubcf4\ub824\uace0 \ud569\ub2c8\ub2e4. Xcode\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\uac00 \uc5b4\ub5bb\uac8c \ube4c\ub4dc \ub418\ub294\uac00? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1282","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1282"}],"collection":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/comments?post=1282"}],"version-history":[{"count":26,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1282\/revisions"}],"predecessor-version":[{"id":1390,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1282\/revisions\/1390"}],"wp:attachment":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/media?parent=1282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/categories?post=1282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/tags?post=1282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}