Understanding Swift Performance
Swift ์ฑ๋ฅ ์ดํดํ๊ธฐ!!!
Swift์ ๋ค์ํ ์ถ์ํ ๋ฉ์ปค๋์ฆ์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํด ์์๋ณด์.
์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ชจ๋ธ๋ง ๋ฐฉ๋ฒ์ ์ ํํด ์ฑ๋ฅ์ ๋์ผ ์ ์์!!
Swift์ ์ถ์ํ ๋ฉ์ปค๋์ฆ์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ ๊ตฌํ์ ์ดํดํ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ถ์ํ๋ฅผ ๊ตฌ์ถํ๊ณ , ์ถ์ํ ๋ฉ์ปค๋์ฆ์ ์ ํํ ๋ ์ธ ๊ฐ์ง ์ธก๋ฉด์ ๊ณ ๋ คํด์ผ ํ๋ค.
1. ๋ด ์ธ์คํด์ค๊ฐ ์คํ(Stack)์ ํ ๋น๋ ๊ฒ์ธ๊ฐ? ์๋๋ฉด ํ(Heap)์ ํ ๋น๋ ๊ฒ์ธ๊ฐ?
2. ์ด ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ ๋ ๋ ํผ๋ฐ์ค ์นด์ดํ (Reference Counting) ์ค๋ฒํค๋๊ฐ ์ผ๋ง๋ ๋ฐ์ํ๋๊ฐ?
3. ์ด ์ธ์คํด์ค์์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, Static Dispatch๋ฅผ ํตํด ํธ์ถ๋๋์ง? ์๋๋ฉด Dynamic Dispatch๋ฅผ ํตํด ํธ์ถ๋๋์ง?
๋น ๋ฅธ Swift ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ํ์ฉํ์ง ์๋ ์ญ๋์ฑ๊ณผ ๋ฐํ์์ ๋ํ ๋น์ฉ์ ์ง๋ถํ์ง ์์์ผ ํ๋ค.
์ฆ, ์์ ๊ทธ๋ฆผ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ ์๋ก ์ฑ๋ฅ์ด ์ ํ๋๊ณ , ์ผ์ชฝ์ผ๋ก ๊ฐ ์๋ก ์ฑ๋ฅ์ด ๋์์ง๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋์ ํผํฌ๋จผ์ค๋ฅผ ์ํด ์ด๋ป๊ฒ ์ด๋ฌํ ๋ค์ํ ์ฐจ์์ ๊ตํํ ์ ์๋์ง ์์์ผ ํจ!!
Allocation (ํ ๋น)
Stack
Swift๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ๊ณ ํด์ ํ๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ์ค ์ผ๋ถ๋ Stack ์์ญ์ ํ ๋น๋จ
Stack์ LIFO(Last In, First Out) ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์คํ ํฌ์ธํฐ๋ฅผ top์ ๋๊ธฐ๋ง ํ๋ฉด ๊ฐ๋จํ๊ฒ ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํด์ ๋ฅผ ํ ์ ์์
ํจ์ ํธ์ถ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค๊ธฐ ์ํด ์คํ ํฌ์ธํฐ๋ฅผ ์ค์ด๊ณ , ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋ค์ ์ฆ๊ฐ ์์ผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํ ์ ์๋ค.
(์๊ฐ๋ณต์ก๋ O(1)๋ก ๊ต์ฅํ ๋น ๋ฆ!!)
Heap
ํ์ ์ฌ์ฉํ๋ฉด ์คํ์ด ๋์ (dynamic) ์๋ช ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค. but ์คํ๋ณด๋ค ํจ์จ์ฑ์ ๋จ์ด์ง
ํจ์จ์ฑ์ด ๋น๊ต์ ๋จ์ด์ง๋ ์ด์ ?
ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ค๋ฉด ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฒ์ํ์ฌ ํ์ํ ๊ณต๊ฐ ๋งํผ์ ๋น ๊ณต๊ฐ์ ์ฐพ์์ผ ํจ
์ ๋ฆฌ๋ฅผ ์์ง ๋ค ๋ชปํด๊ฐ์ง๊ตฌ..... ์ด๋ฒ์ฃผ ๋ด๋ก ๊ผญ ์ถ๊ฐํ๋๋ก ํ๊ฒ ์ด๋๋ค.......
'๐ ๊ธฐ๋ก > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 20231215 (1) | 2023.12.18 |
---|---|
[TIL] 20231207 (3) | 2023.12.08 |
[TIL] 20231205 (2) | 2023.12.05 |
[TIL] 20231204 (1) | 2023.12.04 |
[TIL] 20231130 (2) | 2023.11.30 |