์์ฆ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ Raywenderlich.com ์์ ๋์จ Data Structures & Algorithms in Swift์ด ์ฑ ์ ๋ณด๊ณ ์์ต๋๋ค.
https://www.raywenderlich.com/books/data-structures-algorithms-in-swift
์ ๋ ์ ๋ฆฌํ๋ค๋ณด๋ฉด ์๊พธ ๋ฒ์ญํ๊ฒ ๋๋๋ฐ, ๋ ธ์ ์ ์ ๋ฆฌํด๋ ๊ฑธ ๋ณด๊ณ ํฐ์คํ ๋ฆฌ์๋ ์ฌ๋ฆฌ๋ฉด ์ข๊ฒ ๋ค ์ถ์ด์ ๊ณต์ ํด๋ด ๋๋ค. ์ด ์ฑ ์ ์ ํํ๋ ์ถํ๋ฌผ ํํ์ ์ฑ ์ ์๋๊ณ , ์นํ์ด์ง ํํ๋ก ๋์ด์๋๋ฐ์. Raywenderlich ์์ ํ๋ก ๊ตฌ๋ ์ผ๋ก ์ 39.99๋ฌ๋ฌ๋ฅผ ๋ธ๋ค๋ฉด ์ฑ ์ ๋ชจ๋ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
๊ตฌ๋ ์ ๋ํด์๋ ์๋ ๋งํฌ์์ ์์ธํ ํ์ธํ์ค ์ ์์ต๋๋ค.
์ ๋ฃ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ํฐ์คํ ๋ฆฌ์ ๊ณต๊ฐํ๋ ๊ฒ์ ๋ฐ๋ชจ ๊ณต๊ฐ๋ณธ์ธ ์น์ 2์ ์ฑํฐ 7์ธ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋์ ๊ณผ์ ๊น์ง ๋ฒ์ญํ์ฌ ๊ณต๊ฐํ ์์ ์ ๋๋ค. ํ์ฌ๋ ์๊ฐ, ๊ฐ์ฌ์ ๋ง๊ณผ ๊ฐ์ด ์ฑ ์ ํต์ฌ ๋ด์ฉ๊ณผ ์ง์ ์ ์ผ๋ก ๊ด๊ณ์๋ ๋ถ๋ถ์ ๋งํฌ๋ก ๋์ฒดํฉ๋๋ค! ์ฆ๊ฒ๊ฒ ๋ด์ฃผ์ธ์ :)
์น์ 0. ์์ํ๊ธฐ ์ ์
1. ์ค๋น๋ฌผ
์ด ์ฑ ์ ๋ฐ๋ผ๊ฐ๊ธฐ์ ์ํด์ ์๋ ์ค๋น๋ฌผ์ด ํ์ํฉ๋๋ค.
- ์ต์ Mac OS๊ฐ ๊ตฌ๋๋๋ Mac
- ๊ฐ๋ฐ๋๊ตฌ Xcode๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
- Xcode 13 ๋๋ ์ดํ ๋ฒ์
- Xcode๋ Swift๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฃผ์ ๊ฐ๋ฐ๋๊ตฌ์ ๋๋ค. Swift 5.5๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ต์ํ Xcode 13๋ฒ์ ์ด ํ์ํฉ๋๋ค. ์ฌ๊ธฐ(https://apple.co/1FLn51R) Mac ์ฑ ์คํ ์ด์์ ์ต์ ๋ฒ์ ์ Xcode๋ฅผ ๋ฌด๋ฃ๋ก ๋ค์ด๋ฐ์ ์ ์์ต๋๋ค.
๋ง์ฝ Xcode ์ต์ ๋ฒ์ ์ ์ค์นํ์ง ์์๋ค๋ฉด, ์ด ์ฑ ์ ์งํํ๊ธฐ ์ ์ ์ค์น๋ฅผ ๋ง์ณ์ผํฉ๋๋ค. ์ฑ ์์ ๋ค๋ฃจ๋ ์ฝ๋๋ Swift 5.5์ Xcode 13์์ ๊ตฌ๋๋๋ฏ๋ก, ์ด์ ๋ฒ์ ์ผ๋ก ์์ ํ ๊ฒฝ์ฐ ๊ธธ์ ์์ ์๋ ์์ต๋๋ค.
2. ์ฑ ์ ์์ค์ฝ๋, ํฌ๋ผ
2-1) ์ฑ ์๋ฃ ๋ค์ด๋ฐ๊ธฐ
์ด ์ฑ ์ ์๋ฃ๋ Github ์ ์ฅ์์์ ๋ณต์ (Clone)ํ๊ฑฐ๋ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
2-2) ํฌ๋ผ
์ด ์ฑ ์ ๊ณต์ ํฌ๋ผ์ ์๋ ๋งํฌ์ ๊ฐ์คํ์์ต๋๋ค. ์ฑ ์ ๋ํด ์ง๋ฌธ์ ํ๊ฑฐ๋, ์ฑ ์์ ๋ฐ๊ฒฌํ ์ค๋ฅ์ ๋ํด ์ฌ๋ฆด ์ ์์ต๋๋ค.
https://forums.raywenderlich.com/c/books/data-structures-algorithms-swift
3. ํ์ฌ
4. ํ์๊ฐ
5. ๊ฐ์ฌ์ ๋ง
6. ์๋ฌธ
“iOS ๊ฐ๋ฐ์๋ ๋ฐ๋์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์์ผํ๋์?”
์ด ์ง๋ฌธ์ ์ ๊ฐ ์ํ ์จ๋ผ์ธ ํ ๋ก ๊ทธ๋ฃน์์ ๋ง์ด ์ฌ๋ผ์ค๋ ์ง๋ฌธ์ ๋๋ค. ์ ๊ฐ์ธ์ ์ ๋ฌธ ๊ฐ๋ฐ์๋ก์์ ๊ฒฝํ์ ๊ณต์ ํจ์ผ๋ก์จ ์ด ์ง๋ฌธ์ ๋ตํด๋ณด๊ณ ์ ํฉ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ์ทจ๋ฏธ๋ก ์์ํ ๋ง์ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ ์ญ์๋ ์ปดํจํฐ ๊ณผํ์ ๋ํ ๋ฐฐ๊ฒฝ์ง์ ์์ด ๋ ํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ์ตํ์ต๋๋ค. ์๋ ์ ๊ฑธ์ณ ์ฝ๊ฐ์ ์ง์์ ์ป์์ง๋ง, ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ด๋ฉด์ ํ๊ณ ํ ๊ธฐ๋ฐ์ง์์ ์์์ต๋๋ค.
๊ทธ๊ฒ ๋ฌธ์ ๊ฐ ๋์์๊น์? ์๋์. ๋๋ถ๋ถ ๋ฌธ์ ๋ ์์์ต๋๋ค. ํ๋์ ๊ฐ๋ฐ์๋ก์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋๋ถ๋ถ ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ํํธ์จ์ด์๋ ์ถฉ๋ถํฉ๋๋ค. Swift์ ๋ฐฐ์ด๊ณผ ๋์ ๋๋ฆฌ๋ ์ค๋ ๊ฐ ๊ฒ์ ๋๋ค.
ํ์ง๋ง... ์ ๊ฐ ์ํ๋ ๋๋ก ์ํํธ์จ์ด๋ฅผ ์์ ํ์ง ๋ชปํ๋ ๋๋ ์์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ชปํ๊ฑฐ๋ ์ถฉ๋ถํ ๋น ๋ฅธ ์๋ฃจ์ ์ ๋ง๋ค์ง ์ดํดํ์ง ๋ชปํด์์์ต๋๋ค.
์ด๋ฐ ์ฅ์ ๋ฌผ์ ๋ถ๋ช์น ๋๋ง๋ค, ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ์ ๋ด๊ฐ ๋๋ํ์ง ๋ชปํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก๋, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋๊ตฌ๊ฐ ๋ถ์กฑํ๋ ๊ฒ์ ๋๋ค. ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๋ ๋์ ์ดํ๋ก, ์ํ๋ ์ํํธ์จ์ด๋ฅผ ์ผ๋ง๋ ์์ฑํ ์ ์์์ ๊ฒ์ ๋๋ค.
์ฃผ๋ก ๋ชจ๋ฅด๋ ๋ฌธ์ ์ ๋ํ ์ ์ฒซ์๋๋ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์ฐจ๋ณ๋ก ๋์ ํ๋ ๊ฒ์ ๋๋ค. ๋๋ก๋ ์ ์๋ํ์ง๋ง, ๋ณดํต์ ์ ๋์ง ์์์ต๋๋ค. ์ด๋ฐ ๋จ์ํ ์๋ฃจ์ ์ ๊ณ์ฐํ๋ ๋ฐ ์์ผ์ด ๊ฑธ๋ฆฌ๊ณ , ๊ตฌํ๊ฐ๋ฅํ์ง๋ ์์ต๋๋ค. (์ฌ์ง์ด ์ ๋ Big-O ํ๊ธฐ๋ฒ์ ๋ํด ์์ง๋ ๋ชปํ์ต๋๋ค!)
ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฒ์๋ถํฐ ๋ต์ ๋์ถํ ํ์๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋ฌธ์ ๋ค์ ์ด๋ฏธ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด ์๋ง์ด ํด๊ฒฐ๋์์ผ๋ฉฐ, ์ ์๋ ค์ง ์๋ฃจ์ ๋ ์์ต๋๋ค. ๊ทธ ๋น๊ฒฐ์, ์ด๋ค ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์๋์ง ์ดํดํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ณณ์์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ด ๊ฒ์ด ๊ฒฐ์ค์ ๋งบ๋ ๊ณณ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์นญํ๋์ง ์๊ฒ ๋๋ค๋ฉด ๋ต์ ์ฐพ๋ ๊ฒ์ ์ฝ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, iOS ๊ฐ๋ฐ์๋ก์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ํ์ํ ๊น์? ์ ๋ ์๋๋ผ๊ณ ๋๋ตํ๊ฒ ์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ๋๋ถ๋ถ์ ๋ฌธ์ ์ค 95%๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ ์์ด๋ ํด๊ฒฐํ ์ ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ค ์์ ์์๋ ๋จ์ํ ๋ฌด์ฐจ๋ณ๋ก ๋์ ํ๋ ๊ฒ์ผ๋ก๋ ๊ตฌํํ ์ ์๋ ๋ฌธ์ ์ ๋งํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ฐ ์ํฉ์์, ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ ๋๊ตฌ์์๋ฅผ ๊ฐ์ง๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ช๋ ์ , ์ ๋ ์ด๋ฐ ์ง์์ ๊ฒฉ์ฐจ๋ฅผ ๋ฉ์ฐ๊ณ ์ถ์์ต๋๋ค. ๋ง์ ์๊ณ ๋ฆฌ์ฆ ์ฑ ์ ๊ตฌ๋งคํ๊ณ , Swift์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ์๋ํ๋ฉด ์ ๋ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ํ์ต๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ ๊ฐ ๊ณต๋ถํ๋ ๊ฒ๋ค์ ์ค๋ช ์ ๋ฌ์์ Github ๋ ํฌ์ ์ฌ๋ฆฌ๊ธฐ๋ก ๋ง์๋จน์์ต๋๋ค. ๊ทธ๋์ Swift ์๊ณ ๋ฆฌ์ฆ ํด๋ฝ์ด ํ์ํ๊ฒ ๋์์ต๋๋ค. ์๋ง์ ์ฌ๋๋ค๋ก๋ถํฐ ๊ธฐ์ฌ๋ฅผ ๋ฐ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํจ๊ป 100๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ค๋ช ์ด ์๋ ๋ฉ์ง ์ปค๋ฎค๋ํฐ๋ฅผ ๊ตฌ์ถํ๊ฒ ๋์์ต๋๋ค.
์ฌ์ด๋ ํ๋ก์ ํธ๋ก์ ์๋ง์ Pull ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๋ง์์ก๊ธฐ ๋๋ฌธ์ raywenderlich.com์ ์ฝ๋๋ฅผ ๊ธฐ๋ถํ์๊ณ , ์ด๊ณณ์ ํ๋ฅญํ ์ง์ด ๋์ด์ฃผ์์ต๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๋ก์ด ๊ด๋ฆฌ์์ธ Kelvin๊ณผ Vincent๋ ์ค๋๋ ๋ฉ์ง ์ฝ๋๋ฅผ ๋ง๋๋ ๋ฐ ์๊ณ ํ์ฌ ์ฃผ์์ต๋๋ค. ์ด์ ์ด๋ค์ ์ด๊ฒ๋ค์ ์ฑ ์ผ๋ก ๋ง๋ค์ด์ ํจ์ฌ ๋ณด๊ธฐ ์ข๊ฒ ๋ง๋ค์์ต๋๋ค.
๋ง์ฝ ์ฌ๋ฌ๋ถ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ ์ง์์ ์ฌ๋ฆฌ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด, ์ ๋๋ก ๋ ๊ณณ์ผ๋ก ์ค์ ๊ฒ์ ๋๋ค. ์ด ์ฑ ์ ๋๋๋ค๋ฉด Github์์ The Swift Algorithm Club์ผ๋ก ์์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฅ์ ์ ๋ ๋ง์ด ์ดํด๋ณด์ธ์.
— Matthijs Hollemans
๐ ๋ฒ์ญ ์๋ฆฌ์ฆ ๋งํฌ
0๏ธโฃ ์น์ 0. ์์ํ๊ธฐ์ ์
1๏ธโฃ ์น์ 1. ์๊ฐ Introduction
> ์ฑํฐ 1.์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์์ผํ ๊น์? / ์ฑํฐ 2. ๋ณต์ก๋ Complexity
> ์ฑํฐ3. ์ค์ํํธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ Swift Standard Library
1๏ธโฃ ์น์ 2. ๊ธฐ์ด ์๋ฃ๊ตฌ์กฐ Elementary Data Structure
> ์ฑํฐ 4. ์คํ Stacks / ์ฑํฐ 5. ์คํ ๋์ ๊ณผ์ Stack Challenges
> ์ฑํฐ 6-1. ์ฐ๊ฒฐ๋ฆฌ์คํธ Linked List (์ฐ๊ฒฐ๋ฆฌ์คํธ ์ ์, ์์ ์ถ๊ฐ, ์ญ์ )
> ์ฑํฐ 6-2. ์ฐ๊ฒฐ๋ฆฌ์คํธ Linked List (์ค์ํํธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋ ์ ํ๋กํ ์ฝ, ์นด์ฐ Copy-On-Write, ๋ฐธ๋ฅ ์๋งจํฑ)
> ์ฑํฐ 7. ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋์ ๊ณผ์ Linked List Challenges
๋ง์น๋ฉฐ
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก, ๋์์ด ๋์ จ๋ค๋ฉด ๊ณต๊ฐ ๋ถํ๋๋ฆฝ๋๋ค.
ํน์ ์์ ํ๊ฑฐ๋ ํผ๋๋ฐฑํ์ค ๋ด์ฉ ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋ถํ๋๋ฆฝ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
๋๊ธ