don't stop believing

defer (후처리) 본문

Swift/Basic

defer (후처리)

Tongchun 2018. 1. 24. 13:50

코드 블럭을 나가기 전에 꼭 실행해야 하는 코드는 defer로 처리할 수 있습니다.

defer 구분은 코드가 블록을 어떤 식으로 빠져나가든 간에 꼭 실행해야 하는 마무리 작업을 할 수 있도록 도와 줍니다. 오류가 발생항 코드 블록을 빠져나가는 것이든, 정상적으로 코드가 블록을 빠져나가는 것이든 간에 defer 구문은 코드가 블록을 빠져 나가기 전에 무조건 실행되는 것을 보장합니다.


예를 즐어 함수 내에서 파일을 열어 사용하다가 오류가 발생하여 코드가 블록을 빠져나가더라도 파일을 정상적으로 닫아 메모리에서 해제해야 하기 때문에 defer 구문 내에는 파일을 닫는 코드를 작성해주어 정상적으로 파일이 메모리에서 해제될 수 있도록 해야 합니다.

func writeData() {
    let file = openFile()

    // 함수 코드 블록을 빠져나가기 직전 무조건 실행되어 파일을 잊지 않고 닫아줍니다.
    defer {
        closeFile(file)
    }

    if ... {
        return
    }

    if ... {
        return
    }
    // 처리 끝
}

perfect-redis를 처리할때도 아래와 같이 사용합니다.

func redisPing() {
    RedisClient.getClient(withIdentifier: RedisSessionConnector.connect()) { cli in
        do { let client = try cli()
            client.ping { response in
                defer {
                    RedisClient.releaseClient(client)
                }
                guard case .simpleString(let s) = response else {
                    return
                }
                print("Redis Ping \(s)")
            }
        } catch {
            print("Redis Error (redisPing):\(error)")
        }
    }
}



'Swift > Basic' 카테고리의 다른 글

Map 사용하기  (0) 2018.02.19
탈출 클로저 @escaping  (0) 2018.01.31
Swift Access Control  (0) 2018.01.19
SPM에서 framework와 실행부분 코드 분리하기  (0) 2017.09.15
[swift] command line tool - static/interactive  (0) 2017.08.17
Comments