티스토리 뷰

iOS/Swift-Memo

defer 란 무엇인가?

malrang-malrang 2022. 7. 5. 00:04

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함