defer

malrang·2022년 3월 17일
0

swift

목록 보기
1/4
post-thumbnail

defer

defer 란 무엇인가?

defer 란 사전적 정의로는 연기하다, 지연되다, 미루다 이다.

함수 안에서 주로 사용되며 작성된 위치와 관계없이 함수종료 직전에 실행 된다.

defer 내부에 작성된 코드들이 함수 끝나기 직전에 행 해진다는 뜻이다.

defer 사용 방법

어렵지 않다 defer 키워드를 사용하고 중괄호를 열어 내부를 작성하고 중괄호를 닫으면 완성이다!

예시를 보도록 하자

func f() {
    defer { print("First defer") }
    print("End of function")
}
f()
// Prints "End of function"
// Prints "First defer"

기존 함수의 사이클이라면 함수f를 호출하게되면
"First defer"
"Second defer"
End of function"
순으로 출력되어야 할것인데 defer 를 사용했기 때문에 순서가 바뀌게되었다.

이것 외에도 다른 특징이 있다.

defer 는 여러번 호출이 가능하며 중첩도 가능하다.

stack 과 같은 방식으로 저장된다고 생각하면 이해가 좀 더 편하다.

func f() {
    defer { print("First defer") }
    defer { print("Second defer") }
    print("End of function")
}
f()
// Prints "End of function"
// Prints "Second defer"
// Prints "First defer"

마지막에 defer 가 가장 먼저 실행 된다.
처음 defer 가 가장 마지막에 실행 된다.

중첩에서도 위와 같다.
가장 바깥쪽에 있는 defer 가 가장 먼저 실행되고
가장 안쪽에 있는 defer 가 마지막에 실행된다.

func f() {
    defer {
        defer {
            print("First defer")
        }
        print("Second defer")
    }
}
f()
// Prints "Second defer"
// Prints "First defer"

함수 내부에서 defer 구문이 실행되기전에 함수가 종료되면 defer 구문은 실행되지 않는다.

func f() {
	print("End of function")
    return
    defer { print("First defer") }
    defer { print("Second defer") }
}
f()
// Prints "End of function"

반환값이 있는 함수에서의 사용
defer 를 사용하면 return 이후에 defer 구문을 실행하게된다.

func f() -> String? {
    var malrang: String? = "malrang"
    defer {
        malrang = nil
    }
    return malrang
}
print(f())
// "malrang"

분명 함수내부에서 malrang 에 nil 을 넣어줬는데
return 반환 값은 "malrang" 이다
defer 구문은 return 이후에 실행되는것을 알수있다!

profile
my brain is malrang

0개의 댓글