Open Do-hyun-Kim opened 1 year ago
func test() {
print("First print")
defer { print("!!defer!!")}
print("Second print")
}
test()
/* 결과
First print
Second print
!!defer!
*/
func test3() {
defer { print("1st defer - first") }
defer { print("2nd defer") }
defer { print("3rd defer - last") }
}
test3()
/* 결과
3rd defer - last
2nd defer
1st defer - first
*/
func test4() {
defer {
defer {
defer {
print("1st defer - inner")
}
print("2nd defer")
}
print("3rd defer - outer")
}
}
test4()
/* 결과
3rd defer - outer
2nd defer
1st defer - inner
*/
func test2() {
print("1st print")
return
defer { print("!!defer!!")}
print("2nd print")
}
test2()
/* 결과
1st print
*/
throw
), 종료되면(return
), 이후의 defer 는 실행되지 않는다.Never
인 경우 defer는 실행되지 않는다.
defer가 호출되는 순서는 어떻게 되고, defer가 호출되지 않는 경우를 설명하시오.
📲 defer 호출되는 순서
defer
는 Stack 방식으로 동작하여LIFO
으로 역순으로 호출된다.defer
는 함수가 종료 직전에 마지막에 실행되는 것을 보장한다. 단break
,return
,throw
등의 구문이 있을 시에는 실행이 되지 않는다.💁♂️defer가 호출되지 않는 경우
defer
가 호출 되기전 함수가return
될 경우defer
를 실행 하지 않는다. 또한break
,throws
등과 같은 구문이 있을시에도 동일하게defer
가 실행하지 않는다.Never
값일 경우 에러가 발생하면서 함수를 반환하지 않고 실행을 종료하기 때문에defer
가 실행하지 않는다.