Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 

๊ณ ์ฐจํ•จ์ˆ˜(Higer-order Function)

๐Ÿ’ก ๊ณ ์ฐจ ํ•จ์ˆ˜๋ž€? ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜ ์‹คํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜


  • map ํ•จ์ˆ˜ โ†’ ๊ฐ ์•„์ดํ…œ์„ ๋งคํ•‘ํ•ด์„œ, ๋ณ€ํ˜•ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
let numbers = [1, 2, 3, 4, 5]

numbers.map { num in
	return "์ˆซ์ž: \(num)"
}

// numbers = ["์ˆซ์ž: 1", "์ˆซ์ž: 2", ... , "์ˆซ์ž: 5"]

  • filter ํ•จ์ˆ˜

โ†’ ๊ธฐ์กด ๋ฐฐ์—ด ๋“ฑ์˜ ๊ฐ ์•„์ดํ…œ์„ ์กฐ๊ฑด์„ ํ†ตํ•ด ํ™•์ธ ํ›„, true์ธ ์•„์ดํ…œ์„ ๊ฑธ๋Ÿฌ๋‚ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

let names = ["Apple", "Black", "Circle", "Dream", "Blue"]

var array = names.filter {
	return str.contains("B")
}

print(array) // ["Black", "Blue"]

  • reduce ํ•จ์ˆ˜

โ†’ ๊ธฐ์กด ๋ฐฐ์—ด ๋“ฑ์˜ ๊ฐ ์•„์ดํ…œ์„ ํด๋กœ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒฐํ•ฉํ•ด์„œ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

var numbersArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

var array = numbersArray.reduce(0) { result, item in
	return result + item
}

print(array) // 55

  • map / filter / reduce ํ™œ์šฉ
var numbersArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// ์œ„์˜ ๋ฐฐ์—ด ์ค‘์—, ํ™€์ˆ˜๋งŒ ์ œ๊ณฑํ•ด์„œ, ๊ทธ ์ˆซ์ž๋ฅผ ๋‹ค ๋”ํ•œ ๊ฐ’์€?

var newResult = numbersArray.filter { $0 % 2 != 0 }
												.map { $0 * $0 }
												.reduce(0) { $0 + $1 }

print(newResult) // 1, 9, 25, 49, 81 ===> 165

  • forEach ํ•จ์ˆ˜ โ†’ ๊ฐ ์•„์ดํ…œ๋ณ„๋กœ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.
let immutableArray = [1, 2, 3, 4, 5]

immutableArray.forEach { num in
	print(num)
}

// 1, 2, 3, 4, 5

  • compactMap ํ•จ์ˆ˜ โ†’ ์ž๋™์œผ๋กœ ์˜ต์…”๋„ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
let stringArray: [String?] = ["A", nil, "B", nil, "C"]

var newStringArray = stringArray.compactMap { $0 }
print(newStringArray) // ["A", "B", "C"]

  • flatMap ํ•จ์ˆ˜ โ†’ ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด์˜ ๊ฐ ๋ฐฐ์—ด์„ ์ƒˆ๋กญ๊ฒŒ ๋งคํ•‘ํ•ด์„œ ๋‚ด๋ถ€ ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
var nestedArray = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [13, 14, 15]]

var numbersArray = nestedArray.flatMap { $0 }
// 1, 2, 3, 4, 5, ... , 13, 14, 15