ํฐ์คํ ๋ฆฌ ๋ทฐ
[iOS/Swift] swift์ ๊ณ ์ฐจํจ์๋ค map, filter, reduce... ๋๋จ ๋ญ๋?
Neoguri๐ฆ 2022. 6. 25. 22:06์๋ ํ์ธ์?
๋๊ตฌ๋ฆฌ์ ๋๋ค~~
์ค๋์ ์ฌ๋ฌ๋ถ๋ค์ด ๊ฐ๋ ๋ดค์๋ฒํ swift์ ๊ณ ์ฐจํจ์์ ๋ํด ์์๋ณผ๊น ํฉ๋๋ค!
๋งํด ๋ญํด!
๋ฐ๋ก ์์๋ณผ๊ฒ์!
๊ณ ์ฐจํจ์๋ ๋ญ๊น?
Swift์์ ํจ์๋ ๊ธฐ๋ณธ๋ด์ฉ์ธ๋ฐ์
๊ทธ๋ผ ๊ณ ์ฐจํจ์๋ ๋ญ๊น์?
๊ณ ์ฐจํจ์๋ ๋ฐ๋ก ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ๊ฐ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค!
ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋๋ค๋ผ....
์ด ๋ด์ฉ์ ์๋์์ ๋ํ์ ๊ณ ์ฐจํจ์๋ฅผ ์ด์ผ๊ธฐํ ๋ ๊ฐ์ด ์ค๋ช ํ ๊ฒ์~~
๐พ Map(๋งต)
map์ ์ด๋ค ๊ธฐ๋ฅ์ ํ ๊น์?
์ผ๋จ ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๊ธฐ ์ ์ ์ฌ์ ์ ์ ์๋ฅผ ๋จผ์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
๋งต(map) : (์ ๋ณดํต์ )ํ๋์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก, ํ ๋ฐ์ดํฐ ์งํฉ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์งํฉ์ผ๋ก ๋ฒ์ญํ๋ ๊ฒ
์ด๋ฐ ๋ด์ฉ์ด ์๋ค์!
๊ทธ๋ผ ๊ณต์๋ฌธ์์๋ ์ด๋ค ๋ด์ฉ์ด ์๋์ง ์ฐพ์๋ณด๋ฉด~~

์ด๋ ๊ฒ ๋์ค๋ค์!
์ ์๋ฅผ ์์ธํ ๋ณด๋ฉด
(Self.Element) throw -> T
์ด ํ์ ์ด๋์ ๋ณด์ง ์์๋์?
๋ค!!! ๋ฐ๋ก ํด๋ก์ , ์ฆ ์ต๋ช ํจ์์ด์ฃ ?
๊ทธ๋ฆฌ๊ณ ์ต์ํ Element!!!
์ด๊ฑด ๋ฐ๋ก Sequence, Collection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋๊ฒ์์ ์ฌ์ฉ๋์์ด์!!
์ ํฌ ์ปฌ๋ ์ ํ์ ๋ฐฐ์ธ๋ ๊ฐ์ด ํ์ธํ์์ฃ ?ใ ใ ใ
์ฐ๋ฆฌ๊ฐ ์๊น ๊ณ ์ฐจํจ์ ์ ์์์ ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋์ด ์์๋๋ฐ
ํด๋ก์ ํํ๋ก ๋ฃ์๋ค์!!
์ด์ด์ map์ ๊ธฐ๋ฅ์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ฉด
์์ ์ element๋ฅผ ํด๋ก์ ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํด์ ์ด๋ค ํ์ ์ผ๋ก ๋ณํํ์ ๋ฐฐ์ด์ ๋ด์์ ๋ฆฌํดํ๋ค.
์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํด์ ์๋์ ๋ฐ์ดํฐ๋ ๋ณํจ์๋ค.
๊ทธ๋ฆฌ๊ณ Sequence, Collection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋๊ฒ์์ ์ฌ์ฉํ๋ค.
๊ทธ๋ผ ์ด์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ต์ํด์ ธ ๋ณผ๊ฒ์!!

์ฝ๋๋ฅผ ๋ณด๋ฉด map์ ์ฌ์ฉํ์ ๋
String์ธ "neoguri"๋ฅผ element ํ๋์ฉ ๋๋์ด์ ๋ด์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ง๋ค์๊ตฌ์
๊ธฐ์กด์ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ณ ์๋ค์!
์์ธํ ๋ณด๋ค ๋ณด๋ ์ด๋ฐ ํํ
for๊ตฌ๋ฌธ์ผ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๊ฒ ์ฃ ?
ํ๋ฒ ๋น๊ตํด๋ณด๋๋ก ํ ๊ฒ์~

์ฝ๋๋ฅผ ๋ณด๋ฉด neoguriWithMap(map์ฌ์ฉ)๊ณผ charArr(for๋ฌธ ์ฌ์ฉ)๊ฐ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง์ง๋ง
map์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์!!
๊ทธ๋ฆฌ๊ณ ์ฝ๋ ์ฌ์ฌ์ฉ์ธก๋ฉด์ด๋ ์ปดํ์ผ๋ฌ ์ต์ ํ ์ธก๋ฉด์์๋ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์๋ค๊ณ ํ๋ค์!!
๐พ Filter(ํํฐ)
์ ์ด์ด์ ํํฐ์ ๋ํด ์์๋ณด๋๋ก ํ ๊ฒ์~
ํํฐ๋ ๋ฐ๋ก ์ฌ์ ์ ์๋ฅผ ์ฐพ์๋ณด์ง ์์๋ ๋ค ์๊ณ ๊ณ์๋ ์ฉ์ด์ฃ ?
๋ฐ๋ก ์ด๋ค๊ฒ์ ๊ฑธ๋ฌ๋ด๋ ์ญํ !! ๋ฐ๋ก ๊ทธ ์ญํ ์ ํ๋ ์น๊ตฌ์ ๋๋ค~~
๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ฉด~~

isIncluded์์ ์ฐ๋ฆฌ๊ฐ ํํฐ๋ง ํ๊ณ ์ถ์ ์กฐ๊ฑด(Boolํ์ )์ ๋ง์กฑํ๋ element๋ฅผ
๋ฐฐ์ด์ ๋ด์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์ ํ์์ต๋๋ค!
๋ง์ด ์ด๋ ต์ง ์์ผ๋๊น ๋ฐ๋ก ์ฝ๋๋ก ํ์ธํด๋ณด๋๋ก ํ ๊ฒ์~~

1๋ถํฐ 8๊น์ง ์๋ ์ ์ ๋ฆฌ์คํธ(numberList)์์ ์ง์๋ง์ ๊ฐ์ง๋ ๋ฆฌ์คํธ๋ฅผ
filter๋ฅผ ํตํด์ ๊ตฌํํด๋ดค์ด์!
์ด๋ฒ์๋ ํด๋ก์ ์์ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์๋ตํ์ด์ฉ~
filter๋ธ๋ญ์ Boolํ์ ์ด ๋๋ ์กฐ๊ฑด์ ์ฃผ๋ฉด ๊ทธ ์กฐ๊ฑด์ ๋ง๋ element๋ฅผ ๋ด์ ๋ฐฐ์ด์ด
์ถ๋ ฅ๋ฉ๋๋ค~
์ฝ์ฃ ?ใ ใ
๐พ Reduce(๋ฆฌ๋์ค)
์!! ๋ง์ง๋ง์ผ๋ก ๋ฆฌ๋์ค์ ๋๋ค!!
๋ฆฌ๋์ค๋ฅผ ์ฌ์ ์ ๊ฒ์ํด๋ณด๋ฉด ์ด๋ฐ ๋ด์ฉ๋ค์ด ๋์ค๋๋ฐ์~
reduce(๋ฆฌ๋์ค) :
1.์ค์ด๋ค; ๋ฎ์ถ๋ค
2.์ค์ด๋ค; ์ค์ด๋ค๋ค
3.์ฒด์ค์ ์ค์ด๋ค
์....๋ญ ์ค์ด๋๊ฑธ๊น์...?
์ผ๋จ ์ ๋ชจ๋ฅด๊ฒ ์ผ๋๊น
๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณผ๊ฒ์~~

๋ฆฌ๋์ค๋ฅผ ๊ฒ์ํด๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ 2๊ฐ๊ฐ ๋์ค๋๋ฐ
์ฐจ๋ก๋๋ก ์์๋ณผ๊ฒ์!!
์ ์ฒซ๋ฒ์งธ ๋ฆฌ๋์ค ์ ์์ ๋๋ค!

๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ฉด ์ด๊ธฐ๊ฐ์ธ Result์ element๋ฅผ ๋งค๊ฒจ๋ณ์๋ก ์ฌ์ฉํ๋ ํด๋ก์ ์์
Result๊ฐ์ element๋ฅผ ์ฌ์ฉํด์ ๋๋ฑ๋๋ฑ ๊ฐ๊ณตํ ๋ค์ ์ต์ข ์ ์ธ ๊ฐ Result๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ด๋ค์~~
๊ทธ๋ผ ๋๋ฒ์งธ reduce์ ์ ์๋ ์ดํด๋ณผ๊ฒ์!!

์ฒซ๋ฒ์งธ ๋ฆฌ๋์ค์ ์ ์๊ฐ ์ฝ๊ฐ ๋ค๋ฅธ๋ฐ์!!
๋ฐ๋ก ํด๋ก์ ์์ inout์ Result์ ์ฌ์ฉํ๊ณ ์์ด์!!
์ด๊ฒ ๋ฌด์จ๋ง์ด๋
๋ฐ๋ก result๊ฐ์ ๋ด๋ถ์์ return ํ๋๊ฒ ์๋๋ผ updateํ๋ค๋ ์๋ฏธ์ ๋๋ค!
๋งค๊ฐ๋ณ์ ์ด๋ฆ์๋ณด๋ฉด ๋ ํ์คํ ํ ์ ์์ฃ !
์ฒซ๋ฒ์งธ ๋ฆฌ๋์ค ๋ฉ์๋๋ nextPartialResult๋ก ์ ์๋์ด์๊ณ Result๊ฐ์ ๊ณ์ ๋ฆฌํดํด์ ์ฌ์ฉํ๋ค๋ ๋ง์ด๊ตฌ์!
๋๋ฒ์งธ ๋ฆฌ๋์ค ๋ฉ์๋๋ updateAccumulatingResult๋ก ์ ์๋์ด ์๊ณ Result๊ฐ์ ์ ๋ฐ์ดํธํด์ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค!!
์ดํด ๊ฐ์๋์?
์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ ์ฝ๊ฒ ์ดํด๋ฅผ ํ์ค ์ ์์ ๊ฑฐ์์!
์์ ๋ด์ฉ์ ์ ์ ๋ฐฐ์ด์ ์์ ํฉ์ ๊ตฌํ๋ ๊ฒ์ ๊ตฌํํ๊ฑฐ์์!!

์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด๊ธฐ๊ฐ์ 0์ด๊ณ ์ด๊ณณ์ ๊ฐ ์์๋ฅผ ๋ํ๊ฒ ๋ฉ๋๋ค!!
๊ทผ๋ฐ ์ฒซ๋ฒ์งธ ๋ฉ์๋์ ๋๋ฒ์งธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด
๋ชจ๋ ์ด๊ธฐ๊ฐ์ next(element)๋ฅผ ๋ํ๋๋ฐ
๋๋ฒ์งธ ๋ฉ์๋์์ ์๋ฌ๊ฐ ๋๋๊ฒ์ ๋ณผ ์ ์์ด์!!
์๊ทธ๋ด๊น์?
๋๋ฒ์งธ ๋ฉ์๋์์๋ result๊ฐ ์ ๋ฐ์ดํธ ๋๋ค๊ณ ํ์ฃ ?
๊ทธ๋์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ผ๋ก +๋ฅผ +=๋ก ๋ฐ๊พธ์ด ์ค๋ค๋ฉด??

์๋ฌ๊ฐ ์ฌ๋ผ์ง๊ณ ๋ฐฐ์ด์์์ ํฉ์ ๊ตฌํ ์ ์์ด์!!!
์ด๋ ๊ฒ ์ ๋ฐ์ดํธํ๋ฉด ๋ญ๊ฐ ์ข์๊น์?
๋ฐ๋ก ์ฒซ๋ฒ์งธ ๋ฉ์๋์ ๋ฌ๋ฆฌ ์ด๊ธฐ๊ฐ์ ๋ฐ๊ฟ ์ ์์ด ํจ์จ์ด ์ข๋ค๋๊ฒ๋๋ค!!
์ฒซ๋ฒ์งธ ๋ฉ์๋๋ ์ด๊ธฐ๊ฐ์ ๋ฐ๊ฟ ์ ์๋๋ฐ
๋๋ฒ์งธ ๋ฉ์๋๋ ์ด๊ธฐ๊ฐ์ ์ ๋ฐ์ดํธํ๋๊น ์ด๊ธฐ๊ฐ์ ๋ฐ๊ฟ ์ ์์ด์!!
๐พ ๋ฒ์ธ - reduce(๋ฆฌ๋์ค)๋ ์ ์ด๋ฆ์ด reduce์ผ๊น?
์๊น ์ฌ์ ์์ reduce์ ๋ป์ ์ค์ด๋ค, ๊ฐ์์ํค๋ค๋ผ๋ ๋ป์ด์์์์?
๊ทธ๋ฐ๋ฐ ๊ธฐ๋ฅ์ ๋ณด๋ฉด ์ด๋ค๊ฒ์ ์ค์ธ๋ค๋ ๋๋๋ณด๋ค ํฉ์น๋ ๋๋์ด ์๋๋ฐ
์ ์ด๋ฆ์ reduce๋ผ๊ณ ์ง์์๊น?
ํผ์ ์ด๋ฐ๊ณ ๋ฏผ์ ํ๊ณ ์์๋ ๊ณต์๋ฌธ์์ด ์ด๋ฐ ์ค๋ช ์ด ์๋๋ผ๊ตฌ์

์ ์ฒด ์ํ์ค๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๋ง๋ค๊ณ ์ถ์๋ reduce๋ฅผ ์ฌ์ฉํ๋ผ๋ ์ค๋ช ์ธ๋ฐ์!
์ฆ, ์ฌ๋ฌ ์์๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ์ค์ด๋ ๊ณผ์ ์ด๊ธฐ๋๋ฌธ์ reduce๋ก ์ด๋ฆ์ ์ง์๊ฒ ๊ฐ์์!
(์ถ์ธก ์๋ฃใ ใ ใ ใ )
์ค๋ ๊ณ ์ฐจํจ์์ ๋ํด ์์๋ดค๋๋ฐ์!!
์ ์ฐ๋ฉด ๊น๋ํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๊ฒ๊ฐ์์!
์ค๋๋ ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์๋ ~
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS/Swift] Generic(์ ๋ค๋ฆญ) ๋ ์ง์ง ์ ์๊ณ ์ถ๋ค! (0) | 2022.07.03 |
|---|---|
| [iOS/Swift] map ํ์ ๋ค flatMap๊ณผ compactMap (0) | 2022.06.26 |
| [iOS/Swift] NotificationCenter.. ๋ ๋ญ๋? (1) | 2022.06.20 |
| [iOS/Swift] Protocol์์๋ณด๊ธฐ - (3/3) (0) | 2022.06.13 |
| [iOS/Swift] Protocol ์์๋ณด๊ธฐ - (2/3) (0) | 2022.06.10 |
- Total
- Today
- Yesterday
- swift ํ๋กํ ์ฝ
- func
- XCTest
- observable
- ํ๋กํ ์ฝ
- Clean
- swift
- set
- ๊ณต๋ถ
- Protocol
- xcode
- ios
- swift urlsession
- ์ค์ํํธ ํ๋กํ ์ฝ
- Property
- network
- Swift Network
- RxSwift
- ํ ์คํธ
- autolayout
- ์ค์ํํธ map
- ์คํ ๋ ์ด์์
- ์ค์ํํธ ๊ณต๋ถ
- swift ๊ณต๋ถ
- URLSession
- RX
- ์ค์ํํธ
- Unit Test
- ํ๋กํผํฐ
- test
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |