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을 풀어주어야지 데드락이 걸리지 않을때, 미리 선언을 해두면 추후에 신경을 안쎠도 된다.