
์์ฆ java์ ์๋ ๋ฐฉ์์ ๋ํด์ ๋ฐฐ์ฐ๊ณ ์๋๋ฐ, ์๊ฐํด๋ณด๋ swift๋ ์ด๋ค ๊ณผ์ ์ ํตํด ๋น๋๊ฐ ๋๊ณ ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ด๋ป๊ฒ ๋๋์ด ์๋์ง, ์ด๋ค ๋จธ์ ์ผ๋ก ๋์๊ฐ๊ณ ์๋์ง์ ๋ํด์๋ ๋ชจ๋ฅด๊ณ ์์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ์ด๋ฒ ๊ธฐํ์ swift๊ฐ ๋์๊ฐ๋ ๊ณผ์ ์ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค.
Swift ํ๋ก๊ทธ๋จ์ Xcode์ ๋น๋ ์์คํ ์ ์ํด ์ฒ๋ฆฌ๋๋ค.
Xcode Build System์ด๋?
Apple์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ (IDE)์ธ Xcode์์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ์์คํ ์ด๋ค.
๋น๋ ์์คํ ์ ์ฝ๋์ ๋ฆฌ์์ค ํ์ผ์ ์์ฑ๋ ์ฑ์ผ๋ก ๋ณํํ๋ ๋๊ตฌ๋ฅผ ๊ด๋ฆฌํ๋ค. Xcode์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ผ๊ณ ์ง์ํ๋ฉด ๋น๋ ์์คํ ์ ํ์ผ์ ๋ถ์ํ๊ณ ํ๋ก์ ํธ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ํํ ์์ ์ธํธ๋ฅผ ์กฐํฉํ๋ค. ํ๋ก์ ํธ ์ค์ ์ผ๋ก ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๊ณ ๋น๋๋ฅผ ์๋ฃํ๋ ๋ฐ ํ์ํ ์์ ์ ์ถ๊ฐํ๋ค.
Xcode build system์ ๋ค์๊ณผ ๊ฐ์ด 5๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.

1. Preprocessor ์ ์ฒ๋ฆฌ๊ธฐ
์ปดํ์ผ๋ฌ์๊ฒ ์ ๊ณตํ ์ ์๋ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ณํํด์ฃผ๋ ์ญํ . llbuild๋ผ๋ Xcode์ ํ์ ๋ ๋ฒจ ๋น๋ ์์คํ ์ ํตํด dependencies๋ฅผ ํด๊ฒฐํ๋ค. #if DEBUG ~ #endif, #define ๊ณผ ๊ฐ์ ์ ์ฒ๋ฆฌ๋ฌธ์ด ์ฌ๊ธฐ์ ์ํ๋๋ค.
2. Compiler ์ปดํ์ผ๋ฌ
Swift , Objective-C ๋ฐ C/C++ ์์ค์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณํํด์ฃผ๋ ์ญํ .
์ฌ๊ธฐ์ Apple์์ ์งํํ ์ปดํ์ผ๋ฌ์ ํ์ํ ํด์ฒด์ธ ํ๋ก์ ํธ์ธ LLVM์ ์ฌ์ฉํ๋ค.
LLVM์ ๋ ๊ฐ์ง์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค. ํ๋๋ swiftc(swift-clang)๋ผ๋ Swift์ฉ ์ปดํ์ผ๋ฌ๊ณ , ํ๋๋ Objective-C , Objective-C++ ๋ฐ C/C++ ํ์ผ์ฉ์ธ clang์ด๋ค.

์ปดํ์ผ๋ฌ๋ ํ๋ก ํธ์๋/๋ฐฑ์๋ ๋ ๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋๋ฐ,
์์์ ๋งํ swiftc์ clang์ ํ๋ก ํธ์๋ ์ญํ ์ ํด๋นํ๋ฉฐ ๊ณ ๊ธ์ธ์ด(Swift, C)๋ฅผ IR๋ก ๋ฐ๊พธ์ด์ค๋ค. ํ๋ก ํธ์๋ ๋จ๊ณ์์ ์์ค ํ๋ก๊ทธ๋จ์ Intermediate Representation(์ดํ IR)๊ณผ ์์ค ํ๋ก๊ทธ๋จ์ ๋ํ ์ ๋ณด๋ฅผ ์์งํ๋ symbol table์ด ์์ฑ๋๋ค. (*symbol table: property, function, class ์ด๋ฆ์ ์ ์ฅํ๊ณ ๋งคํํ๋ ์ญํ .)
๋ฐฑ์๋ ๋จ๊ณ์์๋ IR์ ์ต์ ํํ ๋ค, ํ๊ฒ๋จธ์ ์ ๋ง๋ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณํ๋๋ค.
3. Assembler ์ด์ ๋ธ๋ฌ
์ด์ ๋ธ๋ฌ๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ Assembly code๋ฅผ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํํด์ฃผ๊ณ , ์ฝ๋์ ๋ฐ์ดํฐ ๋ชจ์์ธ Mach-O ํ์ผ์ ์์ฑํ๋ค. Xcode์์ .o ํ์ ์ ๊ฐ์ง๋ ํ์ผ๋ค์ด ์๋๋ฐ ์ด๋ฅผ Mach-O ํ์ ์ด๋ผ๊ณ ๋ช ์นญํ๋ค. Mach-O ํ์ผ์ object ํ์ผ, ์คํ ํ์ผ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ๋๋ iOS ๋ฐ macOS ์ด์ ์ฒด์ ์ฉ ํน์ ํ์ผ ํ์์ด๋ค.
4. Linker ๋ง์ปค
๋ง์ปค๋ ์ด์ ๋ธ๋ฌ์์ ๋ง๋ object ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณํฉํ์ฌ ์คํํ ์ ์๋ ํ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ์ญํ .
์ด์ ๋ธ๋ฌ์ ๋ง์ปค ๋ชจ๋ Mach-O ํ์ผ๋ก ์ถ๋ ฅํ๋๋ฐ, ์ฌ๊ธฐ์๋ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
์ด์ ๋ธ๋ฆฌ ๋จ๊ณ์์ ๋์ค๋ object ํ์ผ์ ์์ง ๋ง์ปค์์ ์ฐ๊ฒฐ๋์ง ๋ชปํ ๋ถ๋ถ์ด ํฌํจ๋์ด ์์ ์ ์๋ค.
5. Loader ๋ก๋
๋ง์ง๋ง์ผ๋ก ์ด์์ฒด์ ์ ์ผ๋ถ์ธ ๋ก๋(loader)๋ ๋ง๋ค์ด์ง ์คํ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ณ ์คํํ๋ ์ญํ ์ ํ๋ค. ๋ก๋๋ ํ๋ก๊ทธ๋จ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๊ณ ๋ ์ง์คํฐ๋ฅผ ์ด๊ธฐ ์ํ๋ก ์ด๊ธฐํํ๋ค.
Swift์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ์ด์์ฒด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ด 4๊ฐ์ ์์ญ์ผ๋ก ๋๋๋ค.
| Code | • ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด ํํ๋ก ์ ์ฅ • ์ปดํ์ผ ํ์์ ๊ฒฐ์ |
| Data | • ๋ฐ์ดํฐ ์ ์ฅ (์ ์ญ๋ณ์, static๋ณ์) • ์ปดํ์ผ ํ์์ ๊ฒฐ์ • ํ๋ก๊ทธ๋จ ์์๊ณผ ๋์์ ํ ๋น๋๋ฉฐ, ํ๋ก๊ทธ๋จ ์ข ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ ํด์ |
| Heap | • ์ฐธ์กฐ ํ์
์ ์ฅ (class, closure, function, ...) • ๋ฐํ์ ์์ ๊ฒฐ์ • ํ์ ์ฌ์ฉ ํ ๋ฐ๋์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํ๋๋ฐ, swift๋ ARC๋ผ๋ ๊ฒ์ด ์๋์ผ๋ก ํด์ ํด์ค (๊ฐ๋น์ง์ปฌ๋ ํฐ ๊ฐ์๊ฑด๊ฐ..?) |
| Stack | • ๊ฐ ํ์
์ ์ฅ (struct, enum, tuple, ๊ธฐ๋ณธ์๋ฃํ, ...) (* let msg = "Hello" ๊ฐ์ ๊ฐ๋ ์คํ์ ์ ์ฅ) • ์ปดํ์ผ ํ์์ ๊ฒฐ์ • ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ํด์ |
๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์๋ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ ๊ฒ์ด ๋ง์์ ๋ฐ๋ก ํฌ์คํ ์ ํด์ผ๊ฒ ๋ค...:)
Reference
Build system | Apple Developer Documentation
Compile your code into a binary format, and customize your project settings to build your code.
developer.apple.com
Understanding Xcode Build System
Every Swift program undergoes a number of transformations before it can be run on a real device. This process is usually handled by an Xcode Build System. In this article we'll take a look at each part of Xcode Build System: Swift compiler, linker, preproc
www.vadimbulavin.com
LLVM์ด๋
์๋ ํ์ธ์ :) Zedd์ ๋๋ค. ์ค๋์ LLVM์ ๋ํด์ ๊ณต๋ถํด๋ณด๊ฒ ์ต๋๋ค! ์ ์์ค์ ๋ง์ถฐ์..์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถํด๋ณผ ์์ ์ ๋๋ค. # ์ปดํ์ผ๋ฌ ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก
zeddios.tistory.com
iOS) ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (Code, Data, Stack, Heap)
์๋ ํ์ธ์ฌ~~ ์๋ค์ ๋๋ค :-))))) ์ค๋ ์ฌ ๋ฃ๋ณด์ก ๋ฒ๊ทธ ํ ๋์ด ๋์๋๋ฐ ์ฒ์์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์ค๋ฅ์ธ ์ค ์๊ณ ํ๋ฃจ ์ข ์ผ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด์ ๊ณต๋ถ ํ๋๋ฐ ๋ฒ๊ทธ ์์ธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋์์ใ (๋์ฝ๋ฉ ๋ค
babbab2.tistory.com
iOS) ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (1/3) - ARC(Automatic Reference Counting)
์๋ ํ์ธ์~~ ์๋ค์ ๋๋ค ๐ ์ค๋์ ์ง๋ ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ด์ด Swift๋ฅผ ์ฌ์ฉํ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ด๋ค ์์ผ๋ก ๋๋์ง์ ๋ํด ๊ณต๋ถํด๋ณผ ๊ฑฐ์์ :) ARC ๋ฉด์ ๋จ๊ณจ ์ง๋ฌธ์ด๋ผ์ฃ ? ๊น๊น iOS ๊ฐ๋ฐ์๋ผ
babbab2.tistory.com
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [UIKit] Code-based ๋ณ์ ๋ทฐ ๋๋๊ทธ ์ ์ค์ฒ ๊ตฌํํ๊ธฐ (0) | 2023.07.27 |
|---|