๐ŸŽ iOS & Swift

forEach์™€ for-in์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

taeeekki 2022. 7. 19. 01:50

๋“ค์–ด๊ฐ€๋ฉฐ

๊ทธ ๋™์•ˆ ๋„ˆ๋ฌด ์ƒ๊ฐ์—†์ด forEach๋ฌธ์„ ์‚ฌ์šฉํ•ด์™”๋˜ ๊ฒƒ ๊ฐ™๋‹ค. for-in๊ณผ ๋น„์Šทํ•œ ์—ญํ• ์€ ํ•˜๋Š”์ง€๋Š” ์•Œ์•˜์œผ๋‚˜ ์ •ํ™•ํžˆ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๊นŠ๊ฒŒ ์ƒ๊ฐํ•ด ๋ณธ ์ ์€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฒจ์—๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์‹ ์„ธ๊ณ„์˜€๊ธฐ์— ๋ฌด์ž‘์ • ์จ์™”์ง€๋งŒ ์ด์ œ๋Š” ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์งš์–ด๋ณด๊ณ  ๊ฐˆ ๋•Œ์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค. ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•ด์ฃผ์…”์„œ ์ข‹์€ ๊ธฐํšŒ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


for - in

var nums: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// ์ปฌ๋ ‰์…˜์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋ฐ˜๋ณต
for num in nums {
	print(num)
}

// 5๋ณด๋‹ค ํฐ ์ˆ˜๋งŒ ์ถœ๋ ฅ
for num in nums where num > 5 {
	print(num)
}

// ์ง์ˆ˜๋งŒ ์ถœ๋ ฅ
for num in nums where num % 2 == 0 {
	print(num)
}
  • ์ปฌ๋ ‰์…˜์˜ ์‚ฌ์ด์ฆˆ(๊ฐฏ์ˆ˜, ํฌ๊ธฐ)๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ์œ„์—์„œ num์ด๋ผ๋Š” ๋ถ€๋ถ„์„ ๋ฃจํ”„ ์ƒ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • ํ•ด๋‹น ์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

for-in (with enumerated, indices)

์ฐธ๊ณ  : https://babbab2.tistory.com/95

for (index, num) in nums.enumerated() {
    print("(index: \\(index) num: \\(num))")                // (index: 0 num: 1) (index: 1 num: 2) (index: 2 num: 3) (index: 3 num: 4)
}
 
for index in nums.indices {
    print("(index: \\(index) num: \\(nums[index]))")        // (index: 0 num: 1) (index: 1 num: 2) (index: 2 num: 3) (index: 3 num: 4)
}
 
for index in 0..<nums.count {
    print("(index: \\(index) num: \\(nums[index]))")        // (index: 0 num: 1) (index: 1 num: 2) (index: 2 num: 3) (index: 3 num: 4)
}
  • ์ง์ ‘ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.
  • ๐Ÿ™‹๐Ÿป‍โ™‚๏ธ enumerated๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์ž์ฃผ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ์ธ๋ฑ์Šค์™€ ๊ฐ’์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.
    • indices๋ฅผ ์ด์šฉํ•ด ๋˜‘๊ฐ™์ด ์›ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์‹ ๊ธฐํ–ˆ๋‹ค.

forEach

  • ์ตœ๊ทผ์— ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉํ•˜๋˜ ํ˜•์‹์˜ ์ฝ”๋“œ
  • ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์€ ํด๋กœ์ €๋กœ ์ž‘์„ฑํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.
    • ๋ฐ˜๋ณต๋ฌธ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ!
    • ํด๋กœ์ €๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ์š”์†Œ๋ฅผ ํด๋กœ์ €๊ฐ€ ๋ฐ˜๋ณต ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํด๋กœ์ € ์ƒ์ˆ˜๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
  • ์š”์†Œ ๊ฐฏ์ˆ˜ ๋งŒํผ ํด๋กœ์ €๋ฅผ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต ํšŸ์ˆ˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์‹ ๊ธฐํ–ˆ๋‹ค.
    • ์˜จ์ „ํžˆ ๋ฐ˜๋ณต์„ ๋‹ค ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

์ฐธ๊ณ  : https://babbab2.tistory.com/95

let nums: [Int] = [1, 2, 3, 4]
 
nums.forEach {
    print($0)       // 1 2 3 4
}
  • enumerated์™€ indices์™€ ๊ฐ™์ด ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ์•˜๋‹ค. (์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ๋„ˆ๋ฌด ๋‹น์—ฐํ–ˆ๋˜ ๊ฒƒ..)
nums.enumerated().forEach {
    print("(index: \\($0) num: \\($1))")             // (index: 0 num: 1) (index: 1 num: 2) (index: 2 num: 3) (index: 3 num: 4)
}
 
nums.indices.forEach {
    print("(index: \\($0) num: \\(nums[$0]))")       // (index: 0 num: 1) (index: 1 num: 2) (index: 2 num: 3) (index: 3 num: 4)
}
  • ๋”•์…”๋„ˆ๋ฆฌ ๋ถ€๋ถ„์ด ๊ฝค๋‚˜ ์žฌ๋ฐŒ์—ˆ๋‹ค.
let dict: [String : String] = ["A" : "Apple", "B" : "Banana", "C" : "Cherry"]
 
dict.forEach {
    print("(\\($0.key) : \\($0.value))")  // (B : Banana) (C : Cherry) (A : Apple)
}
 
dict.forEach { (key, value) in
    print("(\\(key) : \\(value))")        // (C : Cherry) (A : Apple) (B : Banana) 
}
 
dict.keys.forEach {
    print($0)       // B C A
}
 
dict.values.sorted().forEach {
    print($0)       // Apple Banana Cherry
}

map๊ณผ forEach?

์ฐธ๊ณ  :  https://hyerios.tistory.com/10

2๊ฐ€์ง€๊ฐ€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณธ ์ ์€ ์—†์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค์ƒ ๋™์ผํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์œ„ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ๊นจ๋‹ฌ์•˜๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โ›” map์€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ , forEach๋Š” ๋ฆฌํ„ด ๊ฐ’ ํ•„์š”์—†์ด ๊ฐ ์š”์†Œ์— ์ฃผ์–ด์ง„ ํด๋กœ์ €๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

map๋„ ๊ฐ ์š”์†Œ์— ๋”ฐ๋ผ ํด๋กœ์ €๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , forEach ์—ญ์‹œ ๊ฐ ์š”์†Œ์— ๋”ฐ๋ผ ํด๋กœ์ €๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด์€ Return์„ ํ•˜๋ƒ, ์•ˆํ•˜๋ƒ์˜ ์ฐจ์ด์ด๋‹ค. map์€ ํด๋กœ์ €๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค ์ปฌ๋ ‰์…˜์„ ๋‹ค์‹œ Return์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๋‹ฌ์•„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , forEach๋Š” Return์„ ๋”ฐ๋กœ ํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๋‹ฌ์•„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.


for-in๊ณผ forEach

์ฐธ๊ณ  :  https://jaeho4646.tistory.com/442

// ๋‘๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์—ด๊ฑฐ

// 1. ๋ฐฐ์—ด์„ ์—ด๊ฑฐ
func withForIn() {
    print(#function)
    let arr = [1, 2, 3]
    for num in arr {
        // break
        // coutinue
        print(num)
        return
    }
}

func withForeach() {
    print(#function)
    let arr = [1, 2, 3]
    arr.forEach { (num) in
        
        // break, continue ์‚ฌ์šฉ๋ถˆ๊ฐ€ -> ๋ฐ˜๋ณต๋ฌธ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—
        print(num)
        return
    }
}

withForIn() // returnํ•œ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ์ข…๋ฃŒ
withForeach() // returnํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํด๋กœ์ € ํ•˜๋‚˜๋งŒ ์ข…๋ฃŒ (๋ฐ˜๋ณตํšŸ์ˆ˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.)
  • ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ๋Š” ๋ฐ˜๋ณต ์ค‘๊ฐ„์— return์„ ์ฃผ์–ด ๋ฉ”์„œ๋“œ๋‚˜ ์–ด๋–ค ์•ก์…˜์˜ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด for-in์˜ ์‚ฌ์šฉ์ด ์ ์ ˆํ•  ๊ฒƒ ๊ฐ™๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ๋ƒฅ forEach๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด๊ฐ€ ์งฐ๋˜ ์ฝ”๋“œ

for - in

  • ๋ฐ›์•„์˜จ ์Šค์ผ€์ค„ ์•„์ดํ…œ๋“ค์„ ์ญ‰ ๋ณด๋ฉด์„œ, ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ์Šค์ผ€์ค„์„ ์›ํ•˜๋Š” ๋ฐฐ์—ด์— ๋‹ด๋Š” ํ˜•ํƒœ์˜ ์ฝ”๋“œ์˜€๋‹ค.
  • ์œ„์—์„œ map๊ณผ forEach? ๋ถ€๋ถ„์—์„œ ๋ณด์•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์•„๋ž˜์—์„œ 2๊ฐ€์ง€ ์ฝ”๋“œ ์˜ˆ์‹œ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • map์„ ์ผ๋˜ ๋ถ€๋ถ„์€ items๋กœ Return์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์‚ฌ์šฉ์ด ์ ์ ˆํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
func parseSchedules() {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = Date.FormatType.full.description

		// 1
    let items = scheduleItems.map { [dateFormatter.date(from: $0.scheduleDate) as Any, $0.isComplete] }
    
		// 2. ์ง€๊ธˆ์€ for-in์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์ง€๋งŒ forEach๋กœ๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
    for item in items {
        guard let scheduleDate = item[0] as? Date else { return }
        guard let isComplete = item[1] as? String else { return }
        
        if isComplete == "doing" {
            doingDates.append(scheduleDate.toString(of: .year))
        } else if isComplete == "done" {
            doneDates.append(scheduleDate.toString(of: .year))
        }
    }
}

 

forEach

  • TabBarItem.allCases๊ฐ๊ฐ์˜ ์—ด๊ฑฐํ˜•์„ ํด๋กœ์ € ์ƒ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ๊ฐ๊ฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ด๋ถ€๋ถ„์„ ๋ณด๋ฉด ์—ด๊ฑฐํ˜•์˜ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ์ปฌ๋ ‰์…˜์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— forEach๋ฌธ์ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
private func setTabBarItems() {
    tabs = [
        UINavigationController(rootViewController: HomeViewController.instanceFromNib()),
        UINavigationController(rootViewController: ShareViewController.instanceFromNib()),
        UINavigationController(rootViewController: NoticeViewController.instanceFromNib()),
        UINavigationController(rootViewController: UIViewController())
    ]

    TabBarItem.allCases.forEach {
        tabs[$0.rawValue].tabBarItem = $0.asTabBarItem()
        tabs[$0.rawValue].tabBarItem.tag = $0.rawValue
    }
    
    setViewControllers(tabs, animated: true)
}

์˜คํ”ˆ ์†Œ์Šค์—์„œ ์ฐพ์•„๋ณธ ์ฝ”๋“œ

kingfisher์—์„œ ์ฐพ์•„๋ณธ forEach๋ฌธ

  • 0..<frameCount์—๋‹ค๊ฐ€ ๋ฐ”๋กœ forEach๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์‹ ๊ธฐํ•˜๋‹ค.
    • https://developer.apple.com/documentation/swift/range
    • ์œ„์˜ ๋ฌธ์„œ์—์„œ๋ณด๋ฉด Range๋ฅผ ์—ฐ์† ๊ฐ’์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉ ์ด๋ผ๊ณ  ์ ํ˜€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • ์šฐ๋ฆฌ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์•„๋ฌด๋Ÿฐ ์˜์‹ฌ ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋А๋‚Œ์ธ ๊ฒƒ ๊ฐ™๋‹ค.
      • // ์—ฌ๊ธฐ์—์„œ 3..<5๋„ ๊ฒฐ๊ตญ ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • for n in 3..<5 { print(n) }
      • // Prints "3"
      • // Prints "4"
  • ์ธ๋ฑ์Šค ํšŸ์ˆ˜๋งŒํผ ํด๋กœ์ €๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๊ณ  ์‹ถ์–ด์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
private func setupAnimatedFrames() {
    resetAnimatedFrames()

    var duration: TimeInterval = 0

    (0..<frameCount).forEach { index in
        let frameDuration = GIFAnimatedImage.getFrameDuration(from: imageSource, at: index)
        duration += min(frameDuration, maxTimeStep)
        animatedFrames.append(AnimatedFrame(image: nil, duration: frameDuration))

        if index > maxFrameCount { return }
        animatedFrames[index] = animatedFrames[index]?.makeAnimatedFrame(image: loadFrame(at: index))
    }

    self.loopDuration = duration
}

NotionDrive๋ผ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ณธ for-in๋ฌธ

https://github.com/underthestars-zhy/NotionDrive/blob/main/Sources/NotionDrive/NotionDrive.swift

  • enumerated()์‚ฌ์šฉ์ด ์ž˜ ๋˜์–ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€์ ธ์™€๋ดค์Œ
for (count, subData) in subDatas.enumerated() {
    let subRequest = PageCreateRequest(
        parent: .page(page.id),
        properties: [
            "title": .init(
                type: .title([
                    .init(string: "\\(count)")
                ])
            ),
        ]
    )
    
    let subPage = try await notion.pageCreate(request: subRequest)
    
    for (count, _subData) in subData.enumerated() {
        let subRequest = PageCreateRequest(
            parent: .page(subPage.id),
            properties: [
                "title": .init(
                    type: .title([
                        .init(string: "\\(count)")
                    ])
                ),
            ],
            children: [
                .init(type: .paragraph(.init(text: [.init(string: _subData)])))
            ]
        )
        
        _ = try await notion.pageCreate(request: subRequest)
    }
}

์†Œ๋ณต์†Œ๋ณต ํ”„๋กœ์ ํŠธ(์‚ฌ์ด๋“œ ํŒ€ ํ”„๋กœ์ ํŠธ)์—์„œ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

// FSCalendar ์‚ฌ์šฉํ•  ๋•Œ
private func configureVisibleCells() {
    calendar.visibleCells().forEach { (cell) in
        let date = calendar.date(for: cell)
        let position = calendar.monthPosition(for: cell)
        self.configure(cell: cell, for: date!, at: position)
    }
}

๋งˆ๋ฌด๋ฆฌ

  1. ์ƒ๊ฐ๋ณด๋‹ค ์˜คํ”ˆ์†Œ์Šค ์ฐพ์•„๋ณด๋Š”๋ฐ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋“  ์ƒ๊ฐ์€ ๊ณผ์žฅํ•ด์„œ ์ฝ”๋“œ์˜ 70-80%๋Š” if๋ฌธ๊ณผ switch๋ฌธ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜๋‚˜๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.
  2. for-in๊ณผ forEach์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„์„œ ์ข‹์•˜๋‹ค.
  3. map๊ณผ forEach๋ฅผ ๋น„๊ตํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.
  4. for-in๊ณผ forEach์™€ ํ•จ๊ป˜ enumerated(), indices, where๋ฌธ์„ ์—ฎ์–ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ข‹์•˜๋‹ค. (enumerated๋Š” ํŒŒ์ด์ฌ์—์„œ ์“ฐ๋Š” ์Šต๊ด€ ๋•Œ๋ฌธ์— ์ข…์ข… ์“ฐ๊ธด ํ–ˆ์ง€๋งŒ..)