티스토리 뷰
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 이후에 실행되는것을 알수있다!
'iOS > Swift-Memo' 카테고리의 다른 글
Swift6의 Protocol (Existential any) (0) | 2022.07.24 |
---|---|
ARC 자동 참조 카운팅 (Automatic Reference Counting) (0) | 2022.07.04 |
Hash Table과 Hashable (0) | 2022.06.18 |
UML(Unified Modeling Language) (0) | 2022.04.29 |
ARC, 순환참조 해결법 (0) | 2022.04.29 |