์๋ ํ์ธ์, ๊ฐ์์ ๋๋ค. ์ด์ ์ฌ์ฌ swift์ ๋ํ ๊ธฐ์ด ๊ฐ๋ ์ด ๋ง๋ฌด๋ฆฌ๋์ด๊ฐ๋๋ฐ์, ์์นญ์ ํ๋ฉดํ ์๋ก ๊ทธ์ '๊ธฐ์ด!' ์ผ ๋ฟ์ด๋๋ผ๊ตฌ์ ^^ ์ค์ผ ์จ๊ฒจ์ง๊ณ ์ด๋ ต๊ณ ๊ผฌ์์ง ๋ฌธ๋ฒ๋ค์ด ๋ง์๊ฑด์ง... ์์ง ๊ฐ๊ธธ์ด ๋จธ๋ค์. ํ์ด์ฌ์ผ๋ก ๋ค๋ฅธ ๋ถ์ผ๋ง ๊ณต๋ถํ๋ค๊ฐ ์ฒ์์ผ๋ก ์ธ์ด๋ฅผ ์ด๋ ๊ฒ ๋ ์๋กญ๊ฒ ๊ณต๋ถํด๋ณด๋ ๊ฒ์ธ๋ฐ, ์์ฃผ ์์ฃผ ์๋กญ๋ค์! ์ผ๋ฅธ todo list๋ผ๋ ๊ฐ๋ฐ ํ ์ ์๋ ์ค๋ ฅ์ ๊ฐ์ง ๋๊น์ง,,,, ํ์ดํ ํด๋ด ์๋ค.!
๊ณ ์ฐจํจ์๋?
๋ค๋ฅธํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๊ฑฐ๋, ํจ์ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ํจ์๋ก ๋ฐํํ๋ ํจ์๋ฅผ ์๋ฏธํ๋ค. swift์ ํจ์๋ ์ผ๊ธ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ํจ์์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌํ ์ ์๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ ์๋ ์๋ค. swift์์ ์ง์ํ๋ ๊ณ ์ฐจํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- map
- filter
- reduce
์ด ์ธ ๊ฐ์ ํจ์๋ Swiftํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปดํ ์ด๋ ํ์ (Array, Set, Dictionary ๋ฑ)์ ๊ตฌํ๋์ด ์๋ค. ๊ทธ๋ผ ์ด์ ์ด ๊ณ ์ฐจํจ์์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์.
1) map
mapํจ์๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ๊ธฐ๋ณธ๋ฐ์ดํฐ๋ฅผ ๋ณํํ์ฌ ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ์์ฑํด์ค๋ค. ์ฝ๋๋ฅผ ์ดํด๋ณด์. ์๋ numbers๋ผ๋ ๋ฐฐ์ด์ด ์์ฑ๋์ด์๊ณ , ๋ฐฐ์ด์ ์ด๊น๊ฐ์ [01,2,3] ์ด๋ค. ๊ทธ๋ฆฌ๊ณ map์ ์ด์ฉํด์ numbers ์ 2์ฉ ๊ณฑํด์ง ๋ฐฐ์ด์ ๋ง๋ค์ด๋ณด์.
let numbers = [0,1,2,3]
let mapArray = nubers.map { (nubmer) -> Int in
return number * 2
}
print("map \(mapArray)")
//prints 'map [0, 2, 4, 6]'
์ด๋ ๊ฒ map์ ๊ธฐ์กด๋ฐ์ดํฐ๋ฅผ ๋ณํํ์ฌ ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
2)filter
์ปจํ ์ด๋ ๋ด๋ถ์ ๊ฐ์ ๊ฑธ๋ฌ์ ์๋ก์ด ์ปจํ ์ด๋๋ก ์ถ์ถํด์ค๋ค. ์ฝ๋๋ฅผ ์ดํด๋ณด์. intArray๊ฐ ์ ์ธ๋์ด์๋ค. ๊ทธ๋ฆฌ๊ณ intArray๋ ํํฐ๋ฅผ ํ์ฉํด์ 5๋ณด๋ค ํฐ ๊ฐ์ ์ ๊ทผํ๊ณ , ์ถ๋ ฅํด๋ณด์.
let intArray = [10, 5, 20, 13, 4]
let filterArray = intArray.filter { $0 > 5 }
print("filter \(filterArray)")
//prints 'filter [10, 20, 13]'
์ด๋ ๊ฒ ํํฐ ๊ณ ์ฐจํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ์ ๊ฐ์ ๊ฑฐ๋ฅผ์ ์๋ค.
3) reduce
reduce๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์์๋ฅผ ํ๋๋ก ํตํฉ์์ผ์ค๋ค. ์ฝ๋๋ฅผ ๋ณด๋ฉด someArray๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ์ด [1,2,3,4,5]๊ฐ ๋ค์ด์๋ค. reduce๋ฅผ ํ์ฉํด์ ์ด ๋ชจ๋ ๊ฐ์ ๋ํด์ค ์ ์๋ค.
let someArray = [1,2,3,4,5]
let reduceResult = someArray.reduce(0) {
(result: Int, element: Int) -> Int in
print("\(result) + \(element)")
return result + element
}
reduce ํจ์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํด์ฃผ์๊ณ , ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์ ํด๋ก์ ๋ฅผ ๋ณด๋ฉด, ๋งค๊ฐ๋ณ์ result๊ฐ๊ณผ element๊ฐ์ ๋ํด๋ฐํํด์ฃผ๊ณ ์๋ค. result ๋งค๊ฐ๋ณ์๋ ๋์ ๊ฐ์ ๋ปํ๊ณ , element ๋งค๊ฐ๋ณ์๋ ๋ฐฐ์ด์ ์์๊ฐ์ ๋ปํ๋ค. ์ด๋ ๊ฒ reduceํจ์๋ฅผ ์ค์ ํ๋ฉด someArray๊ฐ ์์๊ฐ์ ๋ํ ๊ฐ์ด reduceResult ๋ณ์์ ๊ฐ์ ๋์ ๋๋ค. ์คํํด๋ณด๋ฉด ์ด 15๊ฐ ์ถ๋ ฅ๋๋ค.
print("reduce \(reduceResult)")
๋ง์ฝ ์ด๊ธฐ๊ฐ์ 2๋ก ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ด๋ ๊ฒ ์ด๊ธฐ๊ฐ์ด 2์ธ ์ํ์์ ์ฐจ๋ก๋๋ก ๋์ ํด์ ๋ํ๊ฒ๋๋ค. ๊ทธ๋์ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค!
๋ง์น๋ฉฐ
์ด๋ ๊ฒ ๋๋ ํจ์คํธ์บ ํผ์ค์ 30๊ฐ ํ๋ก์ ํธ๋ก ๋ฐฐ์ฐ๋ iOS์ฑ ๊ฐ๋ฐ with Swift ๊ฐ์์์ ์งํํ๋ ์ปค๋ฆฌํ๋ผ๋๋ก ๊ธฐ์ด๊ณต๋ถ๋ฅผ ๋ง์ณค๋ค. ๊ฐ์๋ฅผ ๋ณด๋ฉด์ ๋ธ๋ก๊ทธ ํฌ์คํ ์ ํ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ค์ํ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ๋ ๋ค๋ฅธ ๊ฐ๋ ์ ์ฐพ์๋ณด๋ ๊ณผ์ ์์ ๋ง์ ๊ฒ์ ๋ฐฐ์ ๋ค. ์ด์ ์ ๋ด๊ฐ ๋ฐฐ์ ๋ ํ์ด์ฌ๊ณผ๋ ๋ง์ ์ฐจ์ด๊ฐ ์๋ค. ๋ญ ์์ธ์ฒ๋ฆฌ, ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋ฑ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ณธ์ ์ธ ํํ๋ ๋ฌธ๋ฒ, ๊ธฐ๋ฅ์ ๋น์ทํ์ง๋ง ๊ทธ ์์์๋ ์์ํ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ณ ์ฌ์ํ ๋ฌธ๋ฒ ์ฐจ์ด, ๋์๋ฐฉ์์์ ํฌ๊ฒ ์ฐจ์ด๊ฐ ๋ํ๋ฌ๋ค. ์ด์ ํด๋ก ์ฝ๋ฉ ๋ถํฐ ์์ํด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ ๋ก๋ ํ ์์ ์ธ๋ฐ, ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ธฐ์ด ๊ฐ๋ ์ด ๋ง์ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๊ณ , ๊ผญ 3์๋ถํฐ๋ ๋ด๊ฐ ๋ด์ฑ๋ด๋ง (๋ด ์ฑ์ ๋ด๊ฐ ๋ง๋ ๋ค!) ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์์์ผ๋ฉด ์ข๊ฒ ๋ค!! ํ์ด๋ง๋ง