ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋Š˜์€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.

 

์ฝ”๋“œ๋ฅผ ์งœ๋‹ค ๋ณด๋ฉด ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ฏผํ•  ๋•Œ๊ฐ€ ์ž์ฃผ ์žˆ์—ˆ๋Š”๋ฐ 

์ด๋ฒˆ ๊ธฐํšŒ์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•˜๊ณ  ํ•˜๋ ค๊ณ  ํ•ด์š”

 

Swift์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•


Swift์—์„œ ์˜ค๋ฅ˜๋Š” Error๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

๋˜ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉด ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ํ•ด์š”!

 

์Šค์œ„ํ”„ํŠธ ๊ณต์‹๋ฌธ์„œ์—์„œ ์ข‹์€ ์˜ˆ๊ฐ€ ์žˆ์–ด์„œ ๊ฐ€์ ธ์™€๋ดค์–ด์š”

enum VendingMachineError: Error {
    case invalidSelection
    case insufficientFunds(coinsNeeded: Int)
    case outOfStock
}

์žํŒ๊ธฐ ์ž‘๋™์— ๋Œ€ํ•œ ์˜ค๋ฅ˜์ธ๋ฐ

์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ๋„˜์–ด ๊ฐˆ๊ฒŒ์š”!

 

 

Swift์—์„œ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ์–ด์š”!

  • ํ•จ์ˆ˜์—์„œ ๋ฐœ์ƒํ•œ  ์˜ค๋ฅ˜๋ฅผ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์— ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
  • do-catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์˜ต์…”๋„ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฐจ๋ก€๋Œ€๋กœ ์•Œ์•„๋ณผ๊ฒŒ์š”!!

 

ํ•จ์ˆ˜์—์„œ ๋ฐœ์ƒํ•œ  ์˜ค๋ฅ˜๋ฅผ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์— ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•


์Šค์œ„ํ”„ํŠธ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด

ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜๋Š” ๋˜์ง€๊ธฐ ํ•จ์ˆ˜ throws๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

ํŒŒ๋ผ๋ฏธํ„ฐ ๋’ค ํ•จ์ˆ˜ ์„ ์–ธ์— throws ํ‚ค์›Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

๋ผ๊ณ  ๋‚˜์™€ ์žˆ๋Š”๋ฐ์š”!

๋˜์ง€๊ธฐ ํ•จ์ˆ˜...?

 

์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ธ๊ฒƒ ๊ฐ™์€๋ฐ

์ „๋‹ฌํ–ˆ์œผ๋ฉด ๋ฐ›์•„์•ผ๊ฒ ์ฃ ?

 

๋ฐ”๋กœ try ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋˜์ ธ์ง„ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ณ  ๋ฐ›๋Š”์ง€ ๊ณต์‹๋ฌธ์„œ์˜ ์˜ˆ๋ฌธ์„ ํ†ตํ•ด ์•Œ์•„๋ณผ๊ฒŒ์š”~

 

๋จผ์ € throw์˜ ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค!

// ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ
func canThrowErrors() throws -> String

// ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Œ
func cannotThrowErrors() -> String

์„ค๋ช…๋Œ€๋กœ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋’ค์— throws ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คใ…Žใ…Žใ…Ž

๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ด์ง€๋งŒ throws๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋งŒ ์˜ค๋ฅ˜ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!!

 

class VendingMachine {
    var inventory = [
        "Candy Bar": Item(price: 12, count: 7),
        "Chips": Item(price: 10, count: 4),
        "Pretzels": Item(price: 7, count: 11)
    ]
    var coinsDeposited = 0

    func vend(itemNamed name: String) throws {
        guard let item = inventory[name] else {
            throw VendingMachineError.invalidSelection
        }

        guard item.count > 0 else {
            throw VendingMachineError.outOfStock
        }

        guard item.price <= coinsDeposited else {
            throw VendingMachineError.insufficientFunds(coinsNeeded: item.price - coinsDeposited)
        }

        coinsDeposited -= item.price

        var newItem = item
        newItem.count -= 1
        inventory[name] = newItem

        print("Dispensing \(name)")
    }
}


let favoriteSnacks = [
    "Alice": "Chips",
    "Bob": "Licorice",
    "Eve": "Pretzels",
]
func buyFavoriteSnack(person: String, vendingMachine: VendingMachine) throws {
    let snackName = favoriteSnacks[person] ?? "Candy Bar"
    try vendingMachine.vend(itemNamed: snackName)
}

 ๊ณต์‹๋ฌธ์„œ์˜ ์˜ˆ๋ฌธ์ž…๋‹ˆ๋‹ค!

 

VendingMachine์˜ vend(itemNamed:)๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด throws๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ

์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” guard๋ฌธ์„ ํ†ตํ•ด  ์˜ค๋ฅ˜๊ฐ€ ์ผ์œผํ‚ฌ ๋งŒํ•œ ์‚ฌํ•ญ๋“ค์„ ์ฒดํฌํ•˜๊ณ 

์˜ค๋ฅ˜์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํ•จ์ˆ˜๋ฅผ ์กฐ๊ธฐ์ข…๋ฃŒ ์‹œํ‚จ ํ›„ 

์—๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!!

 

๋˜ buyFavoriteSnack์„ ๋ณด๋ฉด vend(itemNamed:)ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ์—์š”

vend๋ฉ”์„œ๋“œ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๋‹ˆ๊นŒ

๋งŒ์•ฝ์— ์˜ค๋ฅ˜๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค๋ฉด

buyFavoriteSnack๋ฉ”์„œ๋“œ๋„ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ๊ฒ ์ฃ ?ใ…Žใ…Ž

๊ทธ๋ž˜์„œ buyFavoriteSnack๊ฐ€ throws๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธ์ด ๋œ๊ฒƒ์ž…๋‹ˆ๋‹ค!!

 

 

do-catch๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ


์ง€๊ธˆ๊นŒ์ง€ ์˜ค๋ฅ˜๋ฅผ ์—ด์‹ฌํžˆ ๋˜์ง€๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ์š”..ใ…Ž

์ด๋ฒˆ์—๋Š” ๋˜์ ธ์ง„ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ณผ๊ฒŒ์š”!

 

์ด๋–„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์ด do-catch๋ฌธ์ธ๋ฐ์š”~~

๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์ต์ˆ™ํ•œ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹คใ…Žใ…Ž

 

๋จผ์ € ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ํ™•์ธํ•ด ๋ณผ๊ฒŒ์š”!

 

๋ญ”๊ฐ€ switch๋ฌธ๊ณผ ๋น„์Šทํ•˜์ง€ ์•Š๋‚˜์š”?ใ…Žใ…Ž(๋‚˜๋งŒ ๊ทธ๋Ÿฐ๊ฐ€..ใ…Ž)

 

์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ”Œ๋กœ์šฐ๋Š”

do ๋‚ด๋ถ€์—์„œ ์˜ค๋ฅ˜ ์ „๋‹ฌ -> catch๋ฌธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ฒ˜๋ฆฌ

ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค!!

 

๊ทธ๋Ÿผ ๊ณต์‹๋ฌธ์„œ์˜ ์˜ˆ๋ฌธ์„ ๋ณผ๊ฒŒ์š”!

var vendingMachine = VendingMachine()
vendingMachine.coinsDeposited = 8

do {
    try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine)
    print("์„ฑ๊ณต")
} catch VendingMachineError.invalidSelection {
    print("invalid selection")
} catch VendingMachineError.outOfStock {
    print("out of stock")
} catch VendingMachineError.insufficientFunds(let coinsNeeded) {
    print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.")
} catch {
    print("Unexpected error: \(error).")
}
// Prints "Insufficient funds. Please insert an additional 2 coins."

์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ํ”Œ๋กœ์šฐ๋ฅผ ์‚ดํŽด ๋ณผ๊ฒŒ์š”!

๋จผ์ € throws๋ฅผ ์‚ฌ์šฉํ•˜๋Š” buyFavoriteSnack๋ฉ”์„œ๋“œ๋Š” ์—๋Ÿฌ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ

try๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ดํ›„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด success๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด VendingMachineError์™€ ๊ด€๋ จ๋œ ์—๋Ÿฌ์™€

๊ทธ ์ด์™ธ์˜ ์—๋Ÿฌ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋˜๋„๋ก ์ž‘์„ฑํ–ˆ์–ด์š”!

 

๋ณด๋ฉด ๋ณผ์ˆ˜๋ก switch๋ฌธ์ด๋ž‘ ๋น„์Šทํ•ด์„œ ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์š”!!ใ…Žใ…Ž

 

 

Optional ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•


์ด๋ฒˆ์—” ์˜ต์…”๋„ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊ฒŒ์š”!!

์ด ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•œ๋ฐ์š”

๋ฐ”๋กœ try ๋’ค์— ์˜ต์…”๋„์„ ๋ถ™์—ฌ์„œ try? ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.~!

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ nil์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค!!

 

๋ฐ”๋กœ ์˜ˆ๋ฌธ์„ ์‚ดํŽด๋ณด์ฃ ~

func someThrowingFunction() throws -> Int {
    // ...
}

let x = try? someThrowingFunction()

let y: Int?
do {
    y = try someThrowingFunction()
} catch {
    y = nil
}

๊ตฌ๋ฌธ์„ ๋ณด๋ฉด

x์™€ y๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ nil์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๊ณ 

์•„๋‹๊ฒฝ์šฐ Int๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹คใ…Žใ…Ž

 

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•


์Œ ์ด๋ฒˆ ๋ฐฉ๋ฒ•์€ ์กฐ๊ธˆ ์œ„ํ—˜ํ•œ ๋ฐฉ๋ฒ•์ด๊ธด ํ•œ๋ฐ์š”

๋ฐ”๋กœ try!๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ์œ„์˜ ๊ตฌ๋ฌธ์ด๋ž‘ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค!

 

์˜ต์…”๋„์„ ๊ฐ•์ œ๋กœ unwrappingํ•  ๋•Œ nil์ด๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋กœ ์ธํ•ด์„œ ๊ฐ•์ œ ์ข…๋ฃŒ๊ฐ€ ๋˜์—ˆ์ฃ ?

์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

 

์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งŒ์•ฝ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ

๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹คใ… ใ… ใ… 

์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”(๋น„์ถ”๋น„์ถ”!!!)

 

 

ํ›„์ฒ˜๋ฆฌ defer


์ถ”๊ฐ€์ ์œผ๋กœ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋‚˜๊ฐ€๊ธฐ ์ „์— ๊ผญ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด

defer๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์˜ˆ๋ฌธ ํ™•์ธํ•ด ๋ณผ๊ฒŒ์š”!!

func processFile(filename: String) throws {
    if exists(filename) {
        let file = open(filename)
        defer {
            close(file)
        }
        while let line = try file.readline() {
            // Work with the file.
        }
        // close(file) is called here, at the end of the scope.
    }
}

defer๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋“  ๋ง๋“ 

์ฝ”๋“œ ์ˆ˜ํ–‰์ด ๋งˆ๋ฌด๋ฆฌ ๋  ๋•Œ ์‹คํ–‰์ด ๋˜๋Š”๋ฐ์š”!

 

์˜ˆ๋ฌธ์˜ ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ

๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์ผ์„ ์—ด์—ˆ๋‹ค๊ฐ€ ์‹ค์ˆ˜๋กœ ๋‹ซ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ž–์•„์š”?ใ… 

 

๊ทธ๋Ÿด๋•Œ defer๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋‹ซ์•„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹คใ…Žใ…Ž

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!!

(๋„ˆ๋ฌด ์ข‹๋‹ค..ใ…Ž)

 

defer๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด์š”

๋ฐ”๋กœ defer๊ตฌ๋ฌธ์— break๋‚˜ return์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  defer๋ธ”๋Ÿญ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ๋งจ ๋งˆ์ง๋ง‰ ๋ธ”๋Ÿญ๋ถ€ํ„ฐ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!!

 

 

 

 

 

 

์˜ค๋Š˜์€ swift์—์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”!!

๊ฐœ๋ฐœ์ž์ธ ์ •์ƒ ๋™์ž‘ ๋งŒํผ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ์ž˜ ๋Œ€์‘์„ ํ•ด์•ผํ•˜๋Š”๋ฐ

์ด๋ฒˆ ๊ณต๋ถ€์‹œ๊ฐ„์„ ํ†ตํ•ด์„œ ๊ทธ๋Ÿฐ ๋Œ€์‘ ๋Šฅ๋ ฅ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ์—ˆ๋˜๊ฒƒ ๊ฐ™์•„์š”!!

 

๊ธ€ ๋ณด์‹  ๋ถ„๋“ค์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธ€ ์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คใ…Žใ…Ž

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ