defer란?
작성일
defer란?
- 자신의 실행을 함수의 맨 마지막으로 미뤄버린다.
사용방법
defer {
// 나중에 실행하고싶은 함수
}
정말 간단하다 확인 해보면,
func testDefer() {
print("Check 1")
defer { print("defer 1") }
print("Check 2")
}
실행해보면,
check 1
check 2
defer 1
이런 식으로 함수의 가장 마지막에 실행이 된다.
하지만, defer가 실행되기전에, 함수가 종료되버리면 defer는 실행되지 않는다.
- 가장 먼저 읽은 defer가 가장 마지막에 실행이 되는 구조이다.
- 중첩으로 실행할수도 있는데, 이러면 가장 바깥에 있는 defer가 가장 먼저 실행되고, 안쪽에 있는 defer가 가장 마지막에 실행되는 구조다.
그럼 언제사용하는데?
- 함수를 종료하기 직전에 정리해야하는 변수나, 상수를 처리하는 용도이다.
let myLock: NSLock = .init()
func fetchData() {
myLock.lock()
defer { myLock.unlock() }
if data == nil { return }
// 추후 코드
}
이런식으로 NSLock을 사용할때, 함수가 종료되기전에 Lock이 걸린 경우, Lock을 풀어주어야지 데드락이 걸리지 않을때, 미리 선언을 해두면 추후에 신경을 안쎠도 된다.