GGURUPiOS

[Swift] Defer 란? 본문

Swift/문법 파헤치기

[Swift] Defer 란?

꾸럽 2024. 1. 3. 15:28

안녕하세요

이번시간에는 defer 문에 대해 알아보도록 하겠습니다.

 


 

defer 문은 무엇일까요?

defer 문은 defer문이 속해있는 범위 외부로 프로그램 제어권을 이전하기 직전에 코드를 실행

-> defer 블록 내부의 실행문은 함수가 종료되기 직전에 실행되도록 보장 (함수가 끝나기 전에 마지막으로 실행한다)

 

어떻게 동작?

func ex() {
    defer {
      print("1")
    }
    print("2")
}

ex() 

// "2", "1" 순으로 출력 됨

 

2개 이상의 defer문이 있다면 어떻게 될까?

-> defer는 역순으로 실행이 됩니다 (밑의 구문 먼저)

func ex() {
    defer {
      print("1")
    }
    
    defer {
      print("2")
    }
    
    print("3")
}

ex()
// "3", "2", "1" 순으로 출력 됨

 

return 값이 있는 함수에서는?

return 이 먼저된 후, defer 문이 실행됨 (컴플리션 핸들러 처럼 동작할 수 있음)

 

언제 쓸까?

프로그램 제어가 어떻게 되든 상관없이 defer문은 실행됩니다.

그래서 오류가 발생하더라도 반드시 실행되어야 하는 작업을 위해 defer문을 사용할 수 있습니다.

 

defer가 실행되지 않는 경우

throws 함수나, guard 문으로 함수가 조기에 종료되면, defer문은 실행되지 않습니다.