๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ๊ณ ์ฐจํ•จ์ˆ˜

by hyebin (Helia) 2023. 2. 6.
๋ฐ˜์‘ํ˜•

๊ณ ์ฐจํ•จ์ˆ˜

  • ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ํ•จ์ˆ˜์‹คํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • swift์˜ ํ•จ์ˆ˜(ํด๋กœ์ €)๋Š” ์ผ๊ธ‰์‹œ๋ฏผ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ

์ผ๊ธ‰๊ฐ์ฒด (First Class Citizen)

  1. ๊ฐ์ฒด๊ฐ€ ๋Ÿฐํƒ€์ž„์—๋„ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๊ฐ์ฒด๋ฅผ ์ธ์ž ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  4. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

map

  • ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ํด๋กœ์ €๋กœ ๋งคํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜
//For๋ฌธ ์‚ฌ์šฉ
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var multiplyArray = [Int]()

for num in numArray{
    multiplyArray.append(num*7)
}
print(multiplyArray) //[7, 14, 21, 28, 35, 42, 49, 56, 63]

//map ์‚ฌ์šฉ
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var multiplyArray: [Int] = numArray.map {$0*7}

print(multiplyArray) //[7, 14, 21, 28, 35, 42, 49, 56, 63]

 

filter

  • ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด์„œ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜
//For๋ฌธ ์‚ฌ์šฉ
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var evenNumArray = [Int]()

for num in numArray{
    if num%2 == 0{
        evenNumArray.append(num)
    }
}

print(evenNumArray) //[2, 4, 6, 8]

//filter ์‚ฌ์šฉ
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var evenNumArray = numArray.filter {$0%2 == 0}

print(evenNumArray) //[2, 4, 6, 8]

 

reduce

  • ์ •์˜ํ•œ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
  • ์ดˆ๊ธฐ๊ฐ’์ด ํ•„์š”
//For๋ฌธ ์‚ฌ์šฉ
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = 0

for num in numArray{
    sum += num
}

print(sum) //45

//reduce 1
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = numArray.reduce(0, +)

print(sum) //45


//reduce 2
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = numArray.reduce(0) {$0 + $1}

print(sum) //45

 

forEach

  • for-in๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ฐ๊ฐ์˜ Element๋“ค์„ ํ˜ธ์ถœ
  • forEach์—์„œ๋Š” break, continue ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , return์„ ํ†ตํ•ด์„œ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ
let array = [1,2,3,4,5]

//for-in๋ฌธ
for num in array {
    print(num)
}

//forEach๋ฌธ
array.forEach {
    print($0)
}

 

compactMap

  • ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐ ์š”์†Œ๋ฅผ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์—ฌ ํ˜ธ์ถœํ•  ๋•Œ, nil ์ด ์•„๋‹Œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜
  • sequence์˜ ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•œ ๋ณ€ํ™˜ ์ž‘์—… ๊ฒฐ๊ณผ ์ค‘ nil์ด ์•„๋‹Œ ๊ฒƒ๋งŒ์„ Array๋กœ ๋ฐ˜ํ™˜
//1์ฐจ์› ๋ฐฐ์—ด
let a = [1, 2, 3, nil, 4, 5]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest) // [1, 2, 3, 4, 5]

//nil์ด ์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด
let a = [[1, 2, 3], [nil, 4, 5]]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest)
//[[Optional(1), Optional(2), Optional(3)], [nil, Optional(4), Optional(5)]]


//nil์ด ์—†๋Š” 2์ฐจ์› ๋ฐฐ์—ด
let a = [[1, 2, 3], [4, 5]]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest) //[[1, 2, 3], [4, 5]]

 

flatMap

  • ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ์กฐ๊ฑด์„ ํ˜ธ์ถœํ•  ๋•Œ, ์ˆœ์ฐจ์ ์ธ ๊ฒฐ๊ณผ์˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜
  • equence์˜ ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•œ ๋ณ€ํ™˜ ์ž‘์—…์„ concatenate ํ•˜์—ฌ ๋ฐ˜ํ™˜
  • ๊ณ ์ฐจ์› ๋ฐฐ์—ด์„ ํ•œ ๊บผํ’€ ๋ฒ—๊ฒจ์„œ ํ•˜๋‚˜ ์•„๋ž˜์˜ ์ฐจ์›์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค๋Š” ์˜๋ฏธ
//1์ฐจ์› ๋ฐฐ์—ด
let a = [1, 2, 3, nil, 4, 5]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest) // [1, 2, 3, 4, 5]


//nil์ด ์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด
let a = [[1, 2, 3], [nil, 4, 5]]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest)
//[Optional(1), Optional(2), Optional(3), nil, Optional(4), Optional(5)]

//nil์ด ์—†๋Š” 2์ฐจ์› ๋ฐฐ์—ด
let a = [[1, 2, 3], [4, 5]]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest) //[1, 2, 3, 4, 5]

 

๋ฐ˜์‘ํ˜•