defer 구문 알아보기 - 뀔뀔(swieeft)의 개발새발기

defer란 무엇인가


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 실행 순서


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

예제 코드가 많이 복잡해 보이지만 두 가지만 기억하면 실행 순서를 유추하는데 큰 어려움은 없다.

  1. defer는 역순으로 실행된다.