๐ฅ ํค์๋
- Array
- Stack
- Queue
- Property
- Optional
- Closure
- Extension
๐ฅ ์์ ์ง๋ฌธ์ง
- Array์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Array๋ ๋์ผํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ ์ฅํ๋ ์ปฌ๋ ์ ํ์ ์ ๋๋ค. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํฉ๋๋ค. Swift์์ ๋ฐฐ์ด์ Array<Element> ๋๋ [Element] ํํ๋ก ํํ๋ฉ๋๋ค. ๋ฐฐ์ด์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ์๋ ์๊ณ , ๋์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์๋ ์์ต๋๋ค. ๋ฐฐ์ด์ ์ฝ์ , ์ญ์ , ํ์ ๋ฑ์ ์ฐ์ฐ์ด ํจ์จ์ ์ผ๋ก ์ํ๋ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค.
- Stack, Queue ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Stack์ LIFO(Last In, First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฆ, ๋ง์ง๋ง์ ์ถ๊ฐ๋ ์์๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค. ์ฃผ์ ์ฐ์ฐ์ผ๋ก๋ push(์์ ์ถ๊ฐ), pop(์์ ์ ๊ฑฐ), peek(๋ง์ง๋ง ์์ ํ์ธ) ๋ฑ์ด ์์ต๋๋ค.
- Queue๋ FIFO(First In, First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฆ, ์ฒ์์ ์ถ๊ฐ๋ ์์๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค. ์ฃผ์ ์ฐ์ฐ์ผ๋ก๋ enqueue(์์ ์ถ๊ฐ), dequeue(์์ ์ ๊ฑฐ), front(์ฒซ ๋ฒ์งธ ์์ ํ์ธ) ๋ฑ์ด ์์ต๋๋ค.
- iOS์์ Stack์ ์ฌ์ฉํ๋๊ฑด ์ด๋ค๊ฒ ์์๊น์?
- iOS์์ Stack ๊ตฌ์กฐ๋ Navigation Stack์์ ์ฌ์ฉ๋ฉ๋๋ค. UINavigationController๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์คํ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์๋ก์ด ๋ทฐ๋ก ์ด๋ํ ๋๋ง๋ค ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์คํ์ push๋๊ณ , ๋ค๋ก ๊ฐ ๋๋ pop๋์ด ์ด์ ๋ทฐ๋ก ๋์๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ์ฌ์ฉ์๋ ์ง๊ด์ ์ธ ํ์ ๊ฒฝํ์ ํ ์ ์์ต๋๋ค.
- ์ ์ฅ ํ๋กํผํฐ์ ์ฐ์ฐ ํ๋กํผํฐ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- ์ ์ฅ ํ๋กํผํฐ๋ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค์ ๊ฐ์ ์ ์ฅํ๋ ํ๋กํผํฐ์ ๋๋ค. ์ด ๊ฐ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ์ด๊ธฐํ๋๋ฉฐ, ์ดํ์ ๊ฐ์ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค.
- ์ฐ์ฐ ํ๋กํผํฐ๋ ์ค์ ๋ก ๊ฐ์ ์ ์ฅํ์ง ์๊ณ , ๋ค๋ฅธ ๊ฐ์ ๊ธฐ๋ฐํ์ฌ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํ๋กํผํฐ์ ๋๋ค. ์ฐ์ฐ ํ๋กํผํฐ๋ get ๋ธ๋ก์ ํตํด ๊ฐ์ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ set ๋ธ๋ก์ ํตํด ๊ฐ์ ์ค์ ํ ์๋ ์์ต๋๋ค.
- lazy ํ๋กํผํฐ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- lazy ํ๋กํผํฐ๋ ์ด๊ธฐํ๊ฐ ํ์ํ ๋๊น์ง ์ด๊ธฐํ๋์ง ์๋ ํ๋กํผํฐ์ ๋๋ค. ์ฆ, ํด๋น ํ๋กํผํฐ์ ์ฒ์ ์ ๊ทผํ ๋ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค. ์ด๋ ์ด๊ธฐํ ๋น์ฉ์ด ํฌ๊ฑฐ๋ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. lazy ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํฉ๋๋ค.
- Optional์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Optional์ ๊ฐ์ด ์์ ์๋ ์๊ณ ์์ ์๋ ์๋ ๋ณ์๋ฅผ ๋ํ๋ด๋ ํ์ ์ ๋๋ค. Swift์์ Optional์ ?๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๋ฉฐ, ๊ฐ์ด ์์ ๊ฒฝ์ฐ nil์ ๊ฐ์ง ์ ์์ต๋๋ค. Optional์ null safety๋ฅผ ๊ฐํํ์ฌ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ์์ ํ ์ฝ๋ ์์ฑ์ ๋์์ค๋๋ค.
- Optional์ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Optional์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ด ์กด์ฌํ์ง ์์ ์ ์๋ ์ํฉ์ ๋ช ํํ ํํํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด null ๊ฐ์ผ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ฝ๋์ ์์ ์ฑ์ ๋์ ๋๋ค. ๋ํ Optional์ ํจ์๋ ๋ฉ์๋๊ฐ ์คํจํ๊ฑฐ๋ ์ ํจํ์ง ์์ ์ํ๋ฅผ ๋ช ํํ๊ฒ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- Optional ์ธ๋ํ ๋ฐฉ๋ฒ์ ๋ํด์ ์๋๋งํผ ์ค๋ช
ํด์ฃผ์ธ์.
- Optional ์ธ๋ํ์ Optional์ ํฌํจ๋ ๊ฐ์ ์ถ์ถํ๋ ๊ณผ์ ์
๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
- ๊ฐ์ ์ธ๋ํ(Forced Unwrapping): ! ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ก ๊ฐ์ ์ถ์ถํฉ๋๋ค. ํ์ง๋ง ๊ฐ์ด nil์ผ ๊ฒฝ์ฐ ํฌ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ต์ ๋ ๋ฐ์ธ๋ฉ(Optional Binding): if let์ด๋ guard let์ ์ฌ์ฉํด ์์ ํ๊ฒ ๊ฐ์ ์ถ์ถํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๊ฐ์ด ์์ ๋๋ง ์ธ๋ํ์ ์๋ํ๋ฏ๋ก ์์ ํฉ๋๋ค.
- nil ๋ณํฉ ์ฐ์ฐ์(Nil-Coalescing Operator): ?? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Optional์ด nil์ผ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๊ฐ์ ์ ๊ณตํ์ฌ ์ธ๋ํํฉ๋๋ค.
- ์ต์ ๋ ์ฒด์ด๋(Optional Chaining): ?๋ฅผ ์ฌ์ฉํด ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ฉฐ, ์ค๊ฐ์ nil์ด ๋ฐ์ํ๋ฉด nil์ ๋ฐํํฉ๋๋ค.
- Optional ์ธ๋ํ์ Optional์ ํฌํจ๋ ๊ฐ์ ์ถ์ถํ๋ ๊ณผ์ ์
๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
- Closure์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.
- Closure๋ ์ฝ๋์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํจ์์ ๋ธ๋ก์ ๋๋ค. Swift์์ Closure๋ ํจ์์ ๋น์ทํ์ง๋ง, ์ด๋ฆ์ด ์๊ณ , ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ํน์ ์ปจํ ์คํธ์์ ๋ณ์๋ฅผ ์บก์ฒํ ์ ์์ต๋๋ค. Closure๋ ์ฃผ๋ก ์ฝ๋ฐฑ ํจ์๋ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ ํํ๋ { (parameters) -> return type in statements }์ ๋๋ค.
- Escaping Closure์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.
- Escaping Closure๋ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ Closure๊ฐ ํจ์์ ์คํ์ด ๋๋ ํ์ ์คํ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, Closure๋ @escaping ํค์๋๋ฅผ ์ฌ์ฉํด ๋ช ์ํด์ผ ํฉ๋๋ค. ๋น๋๊ธฐ ์์ ์ด๋ ํจ์ ์ธ๋ถ์์ ๋์ค์ ์คํ๋๋ ํด๋ก์ ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ํจ์๊ฐ ์ข ๋ฃ๋ ํ์๋ ํด๋ก์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ์คํ๋ ์ ์์ด ํน๋ณํ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- Extension์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.
- Extension์ ๊ธฐ์กด์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋๋ ํ๋กํ ์ฝ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. Extension์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ์์ค ์ฝ๋์ ์ ๊ทผํ์ง ์๊ณ ๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๋ชจ๋์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ฃผ๋ก ๋ฉ์๋, ์ฐ์ฐ ํ๋กํผํฐ, ์ด๊ธฐํ ๋ฉ์๋ ๋ฑ์ ์ถ๊ฐํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Extension์ ์ฌ์ฉํด๋ณด์
จ๋์?
- ๋ค, Extension์ ์ฌ์ฉํด๋ดค์ต๋๋ค. Extension์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํ์
์ ์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ํ๋กํ ์ฝ์ ์ค์ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์ฌ์ฌ์ฉ์ฑ์ ์ฆ๊ฐ์์ผฐ์ต๋๋ค.
- 12-1. Extension์์ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋์? - ์๋์, Extension์์๋ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. Extension์ ๊ธฐ์กด ํ์ ์ ์๋ก์ด ๋ฉ์๋, ์ฐ์ฐ ํ๋กํผํฐ, ์ด๋์ ๋ผ์ด์ ๋ฑ์ ์ถ๊ฐํ ์ ์์ง๋ง, ์ ์ฅ ํ๋กํผํฐ๋ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฉ๋์ง ์์ต๋๋ค. ๋์ ์ฐ์ฐ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋ค, Extension์ ์ฌ์ฉํด๋ดค์ต๋๋ค. Extension์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํ์
์ ์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ํ๋กํ ์ฝ์ ์ค์ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์ฌ์ฌ์ฉ์ฑ์ ์ฆ๊ฐ์์ผฐ์ต๋๋ค.
๋ฐ์ํ
'TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2024. 08. 16 (0) | 2024.08.19 |
---|---|
[TIL] 2024. 08. 15 (0) | 2024.08.19 |
[TIL] 2024. 08. 13 (0) | 2024.08.13 |
[TIL] 2024. 08. 12 (0) | 2024.08.12 |
[TIL] 2024. 08. 09 (0) | 2024.08.09 |