๋งต, ํํฐ, ๋ฆฌ๋์ค
์ค์ํํธ๋ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ค. ๋ฐ๋ผ์ ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ์ ๋ฌ์ธ์๋ก ์ฌ์ฉํ ์ ์๋ค. ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ๊ฐ๋ ํจ์๋ฅผ ๊ณ ์ฐจํจ์๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ๋ํ์ ์ธ ๊ณ ์ฐจํจ์๋ก ๋งต, ํํฐ, ๋ฆฌ๋์ค๊ฐ ์๋ค.
๋งต
์์ ์ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ํจ์๋ฅผ ์คํํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ฐํํด์ฃผ๋ ํจ์
- ์ค์ํํธ์์ ๋งต์ ๋ฐฐ์ด, ๋์ ๋๋ฆฌ, ์ธํธ, ์ต์ ๋ ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ค.
- ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋๋ฐ ๋ง์ด ์ฌ์ฉํ๋ค.
for-in ๊ตฌ๋ฌธ๊ณผ ๋งต ๋ฉ์๋์ ์ฌ์ฉ ๋น๊ต
let numbers: [Int] = [0,1,2,3,4]
var doubledNumbers: [Int] = [Int]()
var strings: [String] = [String]()
// for ๊ตฌ๋ฌธ ์ฌ์ฉ
for number in numbers {
doubledNumbers.append(number*2)
strings.append("\(number)")
}
print(doubledNumbers) // [0,2,4,6,8]
print(strings) // ["0","1","2","3","4"]
// map ๋ฉ์๋ ์ฌ์ฉ
doubledNumbers = number.map({ (number: Int) -> Int in
return number*2
})
strings = number.map({ (number: Int) -> String in
return "\(number)"
})
print(doubledNumbers) // [0,2,4,6,8]
print(strings) // ["0","1","2","3","4"]
์งง์ ์ฝ๋๋ผ ์ฐจ์ด๋ฅผ ๋๋ผ๊ธฐ๋ ํ๋ค๊ฒ ์ง๋ง, map ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋ for-in ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๊ฒ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ํธ๋ฆฌํ๊ฒ ๊ฐ ์์์ ์ฐ์ฐ์ ์คํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฌ์ง์ด map ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด for-in ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ๋น ๋ฐฐ์ด์ ์ฒ์ ์์ฑํด์ฃผ๋ ์์ ๋ ํ์์๋ค.
ํํฐ
์ปจํ ์ด๋ ๋ด๋ถ์ ๊ฐ์ ๊ฑธ๋ฌ์ ์ถ์ถํ๋ ์ญํ ์ ํ๋ ๊ณ ์ฐจํจ์
- ๋งต๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ก์ด ์ปจํ ์ด๋์ ๊ฐ์ ๋ด์ ๋ฐํํด์ค๋ค.๋ค๋ง ๋งต์ฒ๋ผ ๊ธฐ์กด ์ปจํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ, ํน์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ฑธ๋ฌ๋ด๋ ์ญํ
- filter ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ ํจ์์ ๋ฐํ ํ์ ์ Bool ์ด๋ค. ์๋ก์ด ์ปจํ ์ด๋์ ํฌํจ๋ ํญ๋ชฉ์ด๋ผ๊ณ ํ๋จํ๋ฉด true๋ฅผ, ํฌํจํ์ง ์์ผ๋ ค๋ฉด false๋ฅผ ๋ฐํํ๋ค.
ํํฐ ๋ฉ์๋์ ์ฌ์ฉ
let numbers: [Int] = [0,1,2,3,4,5]
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
return number % 2 == 0
}
print(evenNumbers) // [0,2,4]
let oddNumbers: [Int] = numbers.filter{ $0 % 2 == 1 }
print(oddNumbers) // [1,3,5]
๋ง์ฝ ์ฝํ ์ธ ์ ๋ณํ ํ์ ํํฐ๋งํ๊ณ ์ถ๋ค๋ฉด ๋งต์ ์ฌ์ฉํ ํ์ ํํฐ ๋ฉ์ค๋๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
๋ฆฌ๋์ค
์ปจํ ์ด๋ ๋ด๋ถ์ ์ฝํ ์ธ ๋ฅผ ํ๋๋ก ํฉํ๋ ๊ธฐ๋ฅ ( ๊ฒฐํฉ )
๋ฆฌ๋์ค์ 2๊ฐ์ง ํํ
1. ํด๋ก์ ๊ฐ ๊ฐ ์์๋ฅผ ์ ๋ฌ๋ฐ์ ์ฐ์ฐํ ํ ๊ฐ์ ๋ค์ ํด๋ก์ ์คํ์ ์ํด ๋ฐํํ๋ฉฐ ์ปจํ ์ด๋๋ฅผ ์ํํ๋ ํํ
public func reduce<Result>(_ initialResult: Result,
_ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
initialResult๋ผ๋ ์ด๋ฆ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ ๊ฐ์ ํตํด ์ด๊น๊ฐ์ ์ง์ ํด์ค ์ ์์ผ๋ฉฐ, nextPartialResult๋ผ๋ ์ด๋ฆ์ ๋งค๊ฐ๋ณ์๋ก ํด๋ก์ ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค. nextPartialResult ํด๋ก์ ์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฆฌ๋์ค ๋ฉ์๋์ initialResult๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ด๊น๊ฐ ๋๋ ์ด์ ํด๋ก์ ์ ๊ฒฐ๊ด๊ฐ์ด๋ค. ๋ชจ๋ ์ํ๊ฐ ๋๋๋ฉด ๋ฆฌ๋์ค์ ์ต์ข ๊ฒฐ๊ด๊ฐ์ด ๋๋ค. ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฆฌ๋์ค ๋ฉ์๋๊ฐ ์ํํ๋ ์ปจํ ์ด๋์ ์์์ด๋ค.
2. ์ปจํ ์ด๋๋ฅผ ์ํํ๋ฉฐ ํด๋ก์ ๊ฐ ์คํ๋์ง๋ง ํด๋ก์ ๊ฐ ๋ฐ๋ก ๊ฒฐ๊ด๊ฐ์ ๋ฐํํ์ง ์๋ ํํ
๋์ inout ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊น๊ฐ์ ์ง์ ์ฐ์ฐ์ ์คํํ๊ฒ ๋๋ค.
public func reduce<Reuslt>(into initialResult: Result,
_ updateAccumlatingResult: (inout Result, Element) throws -> ()) rethrows ->
Result
updateAccumulatingResult๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ๋ ํด๋ก์ ์ ๋งค๊ฐ๋ณ์ ์ค ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ inout๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ค. updateAccumulatingResult ํด๋ก์ ์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฆฌ๋์ค ๋ฉ์๋์ initialResult ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํด ์ ๋ฌ๋ฐ๋ ์ด๊น๊ฐ ๋๋ ์ด์ ์ ์คํ๋ ํด๋ก์ ๋๋ฌธ์ ๋ณ๊ฒฝ๋์ด ์๋ ๊ฒฐ๊ด๊ฐ์ด๋ค. ๋ชจ๋ ์ํ๊ฐ ๋๋๋ฉด ๋ฆฌ๋์ค์ ์ต์ข ๊ฒฐ๊ด๊ฐ์ด ๋๋ค. ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฆฌ๋์ค ๋ฉ์๋๊ฐ ์ํํ๋ ์ปจํ ์ด๋์ ์์์ด๋ค. ์ํฉ์ ๋ฐ๋ผ์ ๋ฆฌ๋์ค๋ฅผ ๋งต๊ณผ ์ ์ฌํ๊ฒ ์ฌ์ฉํ ์๋ ์๋ค.
'๐ iOS > ๊ธฐ์ด๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift ๊ธฐ์ด] ์ ๋ค๋ฆญ ( Generic ) (0) | 2023.06.05 |
---|---|
[Swift ๊ธฐ์ด] ๋ชจ๋๋ (0) | 2023.01.31 |
[Swift ๊ธฐ์ด] ์ต์ ๋ ์ฒด์ด๋๊ณผ ๋น ๋ฅธ ์ข ๋ฃ (2) | 2023.01.19 |
[Swift ๊ธฐ์ด] ํด๋ก์ (0) | 2023.01.19 |
[Swift ๊ธฐ์ด] ์ ๊ทผ์ ์ด (0) | 2023.01.18 |