

func main(args: [String]) {
let arr = args.map { Int($0) ?? 0 }
}
- swift ๋ ์์ ์ฑ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์์.
- ๋์ ๋ค์ํ ์ถ์ํ ๊ธฐ๋ฅ, ํด๋ก์ , ์ ๋ค๋ฆญ ๋ฑ ์ง์.
๐ง 1. ์ฑ๋ฅ์ด๋ ๋ฌด์์ธ๊ฐ?
- ์ฑ๋ฅ์ ๋จ์ผ ์งํ๋ก ์ธก์ ํ ์ ์์ผ๋ฉฐ, ๋ค์ฐจ์์ ์ด๊ณ ๋งฅ๋ฝ์ ๋ฐ๋ผ ๋ค๋ฆ.
- ๋ณดํต์ ๊ฑฐ์์ ์ธ ์ฐจ์์์ ์ฑ๋ฅ์ ๋ค๋ฃธ. ์ฑ ์ค๋จ, ui ๋ฐ์ ๋๋ฆผ ๋ฑ๋ฑ..
- ์ผ๋ฐ์ ์ผ๋ก ํํฅ์ ๋ถ์ ๋๊ตฌ (์: Instruments)๋ก ๋ณ๋ชฉ์ ์ฐพ๊ณ , ๋ก์ฐ ๋ ๋ฒจ๊น์ง ๋ด๋ ค๊ฐ๋ ๊ฒฝ์ฐ๋ ๋๋ฌพ.
- ํ์ง๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ์ง๋ง ์ฌ์ ํ ๋๋ฆด ๋, ์ฝ๋๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์คํ๋๋์ง ์ดํดํด์ผ ํจ.
โ๏ธ 2. Swift ๋ก์ฐ ๋ ๋ฒจ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ๋ 4๋ ์์
- swift ์๋ powerful optimizer๊ฐ ์์.
- compiler๊ฐ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํด์ฃผ๊ธฐ ๋๋ฌธ
- ์ต์ ํ์๋ ํ๊ณ๊ฐ ์์.
1. ํจ์ ํธ์ถ ๋น์ฉ (Function calls)

- ๋ค ๊ฐ์ง ๋น์ฉ:
- ์ธ์ ์ ๋ฌ
- ํธ์ถ ํจ์ ์ฃผ์ ๊ฒฐ์
- ๋ก์ปฌ ์ํ ์ ์ฅํ ๊ณต๊ฐ ํ ๋น
- ์ต์ ํ ์ ํ

- ์ ์ ๋์คํจ์น๊ฐ ๊ฐ์ฅ ํจ์จ์ (์ปดํ์ผ๋ฌ ์ต์ ํ ๊ฐ๋ฅ). ์ปดํ์ผ ํ์์ ๋ค์ํ๊ฒ ์ธ๋ผ์ธ ์ฒ๋ฆฌ๋ ์ ๋ค๋ฆญ ๊ตฌ์ฒดํ์ฒ๋ผ ์ต์ ํ ์ด๋ฃจ์ด์ง
- ๋์ ๋์คํจ์น๋ ๋คํ์ฑ์ ์ ๊ณตํ์ง๋ง ์ฑ๋ฅ ๋น์ฉ ์์.

- ๋ฉ์ธ ๋ฐ๋ ์์ ์ ์ธ๋ ๊ฒฝ์ฐ : ํ๋กํ ์ฝ ์๊ตฌ์ฌํญ, ๋์ ๋์คํจ์น ์ฌ์ฉ
- ํ๋กํ ์ฝ ํ์ฅ ์์์ ์ ์ธ๋ ๊ฒฝ์ฐ : ์ ์ ๋์คํจ์น๋ฅผ ์ฌ์ฉ
- ํ๋กํ ์ฝ ๋ฉ์๋๋ ๋์ , ํ๋กํ ์ฝ ํ์ฅ ๋ฉ์๋๋ ์ ์ ๋์คํจ์น.

- ํจ์๊ฐ ์คํ๋๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํจ. ์ผ๋ฐ์ ์ธ ๋๊ธฐ ํจ์์ด๋ฏ๋ก ์ด ๋ฉ๋ชจ๋ฅผ c์คํ์ ํ ๋น.
- ์คํ ํฌ์ธํฐ์์ ํ ๋นํ ๊ณต๊ฐ๋งํผ ๋นผ๋ฉด ๋จ. call frame์ด๋ผ๋ ๊ณต๊ฐ์ ํจ์๊ฐ ์คํ๋ ๊ณต๊ฐ์ด ํ ๋น๋จ.
- ํจ์ ๋ฐํ ์ ์ 208 ๊ณต๊ฐ ๋งํผ ๋ค์ ๋ํด์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํจ.

2. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋น์ฉ (Memory allocation)
- ์ธ ๊ฐ์ง ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ์ข
๋ฅ:
- ๊ธ๋ก๋ฒ: ๋น์ฉ ๊ฑฐ์ ์์ (ํ๋ก๊ทธ๋จ ์ ์ฒด ์ง์)
- ์คํ: ๋น ๋ฅด๊ณ ๊ฐ๋จ, ํจ์ ์ค์ฝํ ๋ด ์ฌ์ฉ
- ํ: ๊ฐ์ฅ ์ ์ฐํ์ง๋ง ํ ๋น/ํด์ ๋น์ฉ ํผ




- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ ๊ถ์ ๊ณต์ , ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ ํผ๋ฐ์ค๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์ฐธ์กฐ
- reference counting์ผ๋ก ํ ๋น์ ์๋ช ๊ด๋ฆฌ
- retain : ๋ ํผ๋ฐ์ค ์นด์ดํธ ๋๋ฆฌ๋ ๊ฒ
- release : ๋ ํผ๋ฐ์ค ์นด์ดํธ ์ค์ด๋ ๊ฒ
- Swift์์ ๊ฐ์ฒด(ํด๋์ค)๋ ํ์ ํ ๋น๋๊ณ **์ฐธ์กฐ ์นด์ดํ (ARC)**์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ.
3. ๋ฉ๋ชจ๋ฆฌ ํํ (Memory Layout)



- Memory Layout : ์ธ๋ผ์ธ ํํ ์ธก์ - 8๋ฐ์ดํธ, 64๋นํธ ํฌ์ธํฐ ํ๋์ ํฌ๊ธฐ


- ๊ตฌ์กฐ์ฒด/ํํ: ์ธ๋ผ์ธ ํํ(inline representation) ์ฌ์ฉ → CallFrame์ ์ง์ ์ ์ฅ๋จ
- ํด๋์ค/๋ฐฐ์ด: ์ธ๋ถ(ํ) ํํ → ํฌ์ธํฐ๋ก ์ ๊ทผ
- ๊ตฌ์กฐ์ฒด๋ ์์ฑ๊น์ง ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌ๋จ
4. ๊ฐ ๋ณต์ฌ ๋น์ฉ (Value copying)
- Swift๋ ๊ฐ์ ์์ ๊ถ์ ๋ช
ํํ ๊ด๋ฆฌ:
- ์๋ชจ(consume) → ์์ ๊ถ ์ด์
- ๋ณ๊ฒฝ(mutating) → ์ผ์์ ์ผ๋ก ์์ ๊ถ ํ๋
- ๋์ฌ(borrow) → ์ฝ๊ธฐ ์ ์ฉ ์ ๊ทผ
- Copy-on-Write(COW) ์ ๋ต: ๋ฐฐ์ด, ๋์ ๋๋ฆฌ, ๋ฌธ์์ด ๋ฑ์ ๋ณ๊ฒฝ ์ ๊น์ง ํ ๊ณต์





๐ ์ฑ๋ฅ ์ต์ ํ ๊ด๋ จ ์ ๋ต

- ๋ณต์ฌ ์ต์ํ: ๋๊ท๋ชจ ๊ตฌ์กฐ์ฒด๋ ๋ณต์ฌ๋ณด๋ค ์ฐธ์กฐ๋ก ์ค๊ณ
- consume ๋ช ์: ์์ ๊ถ ์ด์ ์ ๋ช ํํ๊ฒ ๋ํ๋ด ์ฑ๋ฅ ์ต์ ํ
- ๊ฐ ์๋ฏธ ์ ์ง: ๊ตฌ์กฐ์ฒด๋ฅผ ๊ถ์ฅ, ํด๋์ค๋ ์ธ๋ถ ํํ์ผ๋ก ์ฐธ์กฐ ์๋ฏธ
- ํ ํ ๋น ์ต์ํ: ๊ฐ๋ฅํ๋ฉด ์ธ๋ผ์ธ ํํ ์ฌ์ฉ





๐ฆ ๋น๋๊ธฐ ํจ์ ์ฒ๋ฆฌ ๋ฐฉ์

- ๋น๋๊ธฐ ํจ์๋ ์ผ๋ฐ C ์คํ ๋์ ์์ฒด ์คํ(์ฌ๋ฉ)์ ์ฌ์ฉ
- ๋ฐํ์์ **๋ถ๋ถ ํจ์(partial functions)**๋ก ๋๋๋ฉฐ await ๊ตฌ๊ฐ ๊ธฐ์ค์ผ๋ก ๋๋จ
- ์คํ ์ค ํ๋์ ๋ถ๋ถ ํจ์๋ง ์คํ์ ์ฌ๋ผ๊ฐ ์์
๐งฉ ํด๋ก์ ์ฒ๋ฆฌ ๋ฐฉ์


- ํด๋ก์ ๋ ํจ์ ํฌ์ธํฐ + ์ปจํ ์คํธ ํฌ์ธํฐ๋ก ๊ตฌ์ฑ

- ํ์ถ ๋ถ๊ฐ๋ฅํ ํด๋ก์ ๋ ์คํ์ ์ปจํ ์คํธ ์ ์ฅ → ๋น ๋ฆ

- ํ์ถ ํด๋ก์ ๋ ํ์ ์ ์ฅ + ์์ ๊ถ ํ๋ → ๋น์ฉ ๋ฐ์ (ํธ์ถ ์์์๋ง ์ฌ์ฉ๋ ์ง ์ ์ ์์ผ๋ฏ๋ก)

- ํด๋ก์ ๊ฐ ์บก์ฒํ ๋ก์ปฌ ๋ณ์๋ ํ์ ์ด๋๋จ
๐งฌ ์ ๋ค๋ฆญ & ํ๋กํ ์ฝ ์ฑ๋ฅ


- ์ ๋ค๋ฆญ ํจ์๋ ์ปดํ์ผ ํ์์ ํน์ํ ๊ฐ๋ฅ → ์ฑ๋ฅ ์ข์
- AnyDataModel[] ๊ฐ์ ํ๋กํ ์ฝ ํ์
๋ฐฐ์ด์
- ๊ฐ ์ ์ฅ ๊ณต๊ฐ, ์ ํ ์ ๋ณด, witness table ๋ฑ์ ํฌํจ
- ์ธ๋ผ์ธ or ํ ์ ์ฅ ๊ฒฐ์ ์ ๋ฐํ์์์ ์ํ
- ์ ์ฐ์ฑ์ ๋์ง๋ง ์ต์ ํ ์ด๋ ค์ → ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
์ ๋ค๋ฆญ ํ์ vs ํ๋กํ ์ฝ ํ์ ์ฌ์ฉ ์ ์ฑ๋ฅ ์ฐจ์ด
Swift์์ update(model:) ๊ฐ์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ฒ๋ฆฌ ํจ์๋ฅผ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค:
โ ์ ๋ค๋ฆญ ํ์ ์ ์ฌ์ฉํ๋ ํจ์
func update<T: DataModel>(models: [T]) { ... }
- ํน์ง:
- T๋ ํ๋์ ํ์ ๋ง ์ฌ์ฉ๋จ (์: ๋ชจ๋ MyDataModel).
- T์ ๋ํ ํ์ ์ ๋ณด๋ ์ปดํ์ผ ํ์์ ๊ณ ์ ๋จ.
- ์ตํฐ๋ง์ด์ ๊ฐ ์ด ํ์ ์ ๋ง์ถฐ ์ธ๋ผ์ธ ์ต์ ํ ๊ฐ๋ฅ.
- ํจ์๋ ํจ์จ์ ์ผ๋ก ์คํ๋จ.
โ ๋น ๋ฆ, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ์์ธก ๊ฐ๋ฅ, ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํ ์ํด์ค
โก ํ๋กํ ์ฝ ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ํจ์
func update(models: [any DataModel]) { ... }
- ํน์ง:
- ๋ฐฐ์ด์ ๊ฐ ์์๊ฐ ์๋ก ๋ค๋ฅธ ํ์ ์ผ ์ ์์.
- ์: MyDataModel, OtherDataModel ํผํฉ.
- ์คํ ์ ๊ฐ ์์์ ์ค์ ํ์ ์ ๋งค๋ฒ ํ์ธํด์ผ ํจ.
- Swift๋ ๋ด๋ถ์ ์ผ๋ก ํจ์ ํฌ์ธํฐ ํ ์ด๋ธ(witness table) ์ ์ฌ์ฉํด ๋์.
- ์ฑ๋ฅ ์ต์ ํ ์ด๋ ต๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋จ.
โ ๏ธ ์ ์ฐํ์ง๋ง ๋๋ฆด ์ ์์, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ ๊ฐ๊ฐ, ์ต์ ํ ์ด๋ ต๋ค
๐ฆ Swift ๋ด๋ถ ๋์ ๋ฐฉ์ ๋น๊ต
| ๊ตฌ๋ถ | ์ ๋ค๋ฆญ ํ์ (T: DataModel) | ํ๋กํ ์ฝ ํ์ (any DataModel) |
| ํ์ ๊ฒฐ์ ์์ | ์ปดํ์ผ ํ์ | ๋ฐํ์ |
| ํจ์ ์ต์ ํ | ๊ฐ๋ฅ (์ธ๋ผ์ธ/ํน์ํ) | ์ด๋ ค์ |
| ๋ฐฐ์ด ๊ตฌ์กฐ | ํ์ ํ๋๋ก ์กฐ๋ฐํ๊ฒ ๊ตฌ์ฑ๋จ | ๊ฐ ์์๊ฐ ๋ค๋ฅด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฐ์ |
| ์ฑ๋ฅ | ๋น ๋ฆ | ๋๋ฆด ์ ์์ |
| ์ ์ฐ์ฑ | ๋ฎ์ | ๋์ |
๐ก Swift๋ ์ด๋ป๊ฒ ์ ์ฅํ๋?
- Swift๋ any Protocol ํ์
์ ์ฌ์ฉํ ๋,
- ์์ผ๋ฉด ๋ฒํผ์ ์ง์ ์ ์ฅ (์ธ๋ผ์ธ)
- ํฌ๋ฉด ํ์ ์ ์ฅํ๊ณ ํฌ์ธํฐ๋ง ์ ์ง
๐ง ๊ฒฐ๋ก ๋ฐ ์กฐ์ธ
- โ ์ฑ๋ฅ์ด ๋งค์ฐ ์ค์ํ๋ฉด ์ ๋ค๋ฆญ ํจ์๋ฅผ ์ฌ์ฉํ์ธ์.
- โ ์ฌ๋ฌ ํ์ ์ ๋ค๋ค์ผ ํ ๋๋ ํ๋กํ ์ฝ ํ์ ์ด ํ์ํฉ๋๋ค.
- โ ํ์ง๋ง “ํ๋กํ ์ฝ์ ๋๋ฆฌ๋ค, ์ฐ์ง ๋ง์”๋ ์คํด์ ๋๋ค.
- → ์ถ์ํ๋ ๋น์ฉ์ด ์์ง๋ง, ์ ์ง๋ณด์์ฑ๊ณผ ์ ์ฐ์ฑ์ ์ํด ์ธ ๊ฐ์น๊ฐ ์์ด์.
๐ฃ๏ธ ํ๋ง๋ ์์ฝ
์ ๋ค๋ฆญ์ ๋น ๋ฅด๊ณ , ํ๋กํ ์ฝ์ ์ ์ฐํ๋ค.
์ํฉ์ ๋ฐ๋ผ ์ฑ๋ฅ๊ณผ ์ ์ฐ์ฑ ์ฌ์ด์์ ๊ท ํ์ ์ก๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ง ๊ฒฐ๋ก & ์กฐ์ธ
- ์ถ์ํ๋ ๋น์ฉ์ ๋๋ฐํ์ง๋ง ํ์ํ ๊ฒฝ์ฐ ์ ๋นํ๋จ
- ์ถ์ํ๋ฅผ ๋ฌด์กฐ๊ฑด ํผํ๊ธฐ๋ณด๋ค ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ ์์๋ก ์ธ์ํ์
- Swift ์ฑ๋ฅ์ ๋ํ ์ง๊ด์ ๊ธฐ๋ฅด๋ฉด ์ค์ ์ฑ ์ต์ ํ์ ํฐ ๋์
๐ ์ฐธ๊ณ ํค์๋
- ARC (Automatic Reference Counting)
- Copy-on-Write (COW)
- CallFrame / Memory Slab
- ์ ์ vs ๋์ ๋์คํจ์น
- consume, mutating, borrow ๋์
- Swift ํ๋กํ ์ฝ witness table
- ๋น๋๊ธฐ ํจ์ ๋ถํด (partial functions)
'iOS > WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| WWDC24) SwiftUI ํต์ฌ ๊ธฐ๋ฅ (2) | 2025.06.15 |
|---|---|
| WWDC25) Xcode์ ์๋ก์ด ๊ธฐ๋ฅ (6) | 2025.06.13 |
| WWDC24) Swift testing์ผ๋ก ํ ์คํธ ์ฌํํ๊ธฐ (0) | 2025.05.25 |
| WWDC24) Swift Testing ์๊ฐ (0) | 2025.05.25 |
| ๐ฑ WWDC 2024 - [Analyze heap memory] ์ ๋ฆฌ ๋ฐ ๋ฆฌ๋ทฐ (3) | 2025.05.17 |