Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/Swift BASIC

[Swift] ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ๊ณ ์ฐจํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด์ž (map, filter, reduce)

๊ฐ์ž ๐Ÿฅ” 2022. 1. 23. 13:46
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์ž์ž…๋‹ˆ๋‹ค. ์ด์ œ ์Šฌ์Šฌ 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์›”๋ถ€ํ„ฐ๋Š” ๋‚ด๊ฐ€ ๋‚ด์•ฑ๋‚ด๋งŒ (๋‚ด ์•ฑ์€ ๋‚ด๊ฐ€ ๋งŒ๋“ ๋‹ค!) ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค!! ํ™”์ด๋ง๋ง

๋ฐ˜์‘ํ˜•