ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] - defer λ¬Έμ΄λž€?
    iOS/🟠 Swift 2021. 4. 29. 17:36

    μ„ μ–Έλœ λΈ”λ‘μ˜ 싀행을 μŠ€μ½”ν”„ μ’…λ£Œ μ§μ „κΉŒμ§€ μ—°κΈ°μ‹œν‚€λŠ” ν‚€μ›Œλ“œ

    "호좜 μ‹œμ κ³Ό μ‹€ν–‰ μ‹œμ μ΄ λ‹€λ₯΄λ‹€"

     

    μš©λ„ : 주둜 μ½”λ“œμ—μ„œ μ‚¬μš©ν–ˆλ˜ μžμ›μ„ 정리할 λ•Œ μ‚¬μš©ν•œλ‹€.

    μ˜ˆμ‹œ) 파일 처리 μ—μ„œ 파일 λ‹«κΈ°

    func processFile(path: String) {
        let file = FileHandle(forReadingAtPath: path)
    
        // Process
    
        if path.hasSuffic(".jpg") {
            return
            // closeFile()이 ν˜ΈμΆœλ˜μ§€ μ•ŠμŒ
        }
    
        file?.closeFile()
    
    }

     

    πŸ’‘ν•΄κ²°

    defer λ¬Έ μ•ˆμ— closeFile 을 κ΅¬ν˜„ν•΄ λ†“μœΌλ©΄ ν•¨μˆ˜ λ°˜ν™˜ 직전에 싀행을 보μž₯ν•  수 μžˆλ‹€.

    func processFile(path: String) {
        let file = FileHandle(forReadingAtPath: path)
    
        // Process
    
        defer {
        // μŠ€μ½”ν”„ μ’…λ£Œ μ‹œμ μœΌλ‘œ μ‹€ν–‰ μ—°κΈ°
            file?.closeFile()
        }
    
        if path.hasSuffic(".jpg") {
            return
        }
    }

     

    β—οΈμ£Όμ˜ν•  점

    defer 문이 μš°μ„  ν˜ΈμΆœλ˜μ–΄μ•Ό μ’…λ£Œ μ‹œμ μ— 싀행될 수 μžˆλ‹€.

    μ•„λž˜ μ½”λ“œλŠ” if λ¬Έ μ—μ„œ processFile(path:) κ°€ λ°˜ν™˜λ˜μ–΄, defer 문이 ν˜ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€.

    ν•΄κ²° : λ”°λΌμ„œ μ½”λ“œ 블둝 상단에 주둜 defer 문을 μ„ μ–Έν•΄λ†“λŠ”λ‹€. (μœ„μ˜ μ½”λ“œ μ°Έκ³ )

    func processFile(path: String) {
        let file = FileHandle(forReadingAtPath: path)
    
        // Process
    
        if path.hasSuffic(".jpg") {
            return
        }
    
        // if λ¬Έμ—μ„œ μ’…λ£Œλ˜λ©΄ ν˜ΈμΆœλ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
        defer {
            file?.closeFile()
        }
    }

     

    🍯 μ—¬λŸ¬ 개의 defer 블둝 호좜 μˆœμ„œ

    defer 문은 ν˜ΈμΆœλ˜λŠ” μˆœμ„œμ˜ μ—­μˆœμœΌλ‘œ μ‹€ν–‰λœλ‹€. LIFO 방식이라고 μƒκ°ν•˜λ©΄ 이해가 νŽΈν•˜λ‹€.

    이와 같이 defer 문의 νŠΉμ§•μ„ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  κ΅¬ν˜„ν•˜λ©΄ 논리적인 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλ‹€.

     

    κ·Έλž˜μ„œ 보톡 defer ν•˜λ‚˜μ— μ½”λ“œλ₯Ό λͺ¨μ•„ λ†“λŠ”λ‹€.

    func deferTestFunction() {
    
        defer {
            print("1")
        }
        defer {
            print("2")
        }
        defer {
            print("3")
        }
    }
    
    deferTestFunction()
    // prints "3" -> "2" -> "1"

     

     

     

    끝!


    πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

    iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜