defer 구문 알아보기 - 뀔뀔(swieeft)의 개발새발기
defer란, 현재 코드 블록을 나가기 전에 꼭 실행해야 되는 코드를 작성하여 코드가 블록을 어떻게 빠져 나가든 꼭 마무리해야 하는 작업을 할 수 있게 도와준다.
func test() {
defer {
print("test")
}
print("Hello World")
}
// 실행 결과
// Hello World
// test
func test() {
defer {
print("test 1")
}
defer {
print("test 2")
}
defer {
print("test 3")
}
defer {
print("test 4")
}
print("test 5")
}
// 실행 순서
// test 5
// test 4
// test 3
// test 2
// test 1
defer는 현재 코드 블록을 빠져 나가기 전에 실행된다고 하였다. 그렇다면 중첩 작성된 코드 블록에서는 어떻게 작동할까?
func test() {
defer {
print("test 1")
}
do {
defer {
print("test 2")
}
print("test 3")
}
for num in 0..<2 {
defer {
print("test 4")
}
if num % 2 == 0 {
defer {
print("test 5")
}
print("test 6")
}
}
defer {
print("test 7")
}
print("test 8")
}
// 실행 순서
// test 3
// test 2
// test 6
// test 5
// test 4
// test 4
// test 8
// test 7
// test 1
예제 코드가 많이 복잡해 보이지만 두 가지만 기억하면 실행 순서를 유추하는데 큰 어려움은 없다.