![swift defer 블록](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeyBmB%2FbtrKetRfc3k%2FaXp37YLRWNapcPTmYApZx0%2Fimg.png)
swift defer 블록Language/Swift2022. 8. 22. 12:04
Table of Contents
문법에 대한 공부를 하다보니 defer 블록에 대해 나와 정리를 하고자 합니다.
defer 블록이란?
함수나 메소드에서 코드의 흐름과 상관없이 가장 마지막에 실행되는 블록입니다.
defer 블록 사용은 언제?
종료 시점에 맞추어서 처리해야 할 구문을 넣으면 됩니다.
각종 리소스의 처리나 해제, 연결 종료 등의 구문을 처리하는 용도로 사용됩니다.
defer 블록의 특성은?
- 작성된 위치와 순서에 상관없이 함수가 종료되기 직전에 실행됩니다.
- 읽기 전에 함수의 실행이 종료될 경우 defer 블록은 실행되지 않습니다.
- defer 블록이 여러 번 사용되었다면, 역순으로 실행됩니다.
- defer 블록을 중첩해서 사용되었다면, 바깥쪽부터 실행됩니다.
func Test() {
defer { print("defer #1") }
defer { print("defer #2") }
defer { print("defer #3") }
...
}
/*
* Test result is
* defer #3
* defer #2
* defer #1
*/
func Test() {
defer {
defer {
defer {
print("defer #1")
}
print("defer #2")
}
print("defer #3")
}
...
}
/*
* Test result is
* defer #3
* defer #2
* defer #1
*/
아직은 문법을 익히는 중이라 사용 용도에 대해서 찾아보니 좋은 블로그가 있어서 참고를 하였습니다.
그 중에서 가장 일반적으로 사용되는 방법 하나만 소개를 하겠습니다.
func append(_ elements: [Element]) {
lock.lock()
defer {
lock.unlock()
}
array.append(contentsOf: elements)
}
위의 코드는 잠금을 잠그고 매개변수의 내용을 지정된 배열에 추가하고 명령문의 잠금을 해제합니다 . 이 코드에서 잠금은 프로그램 제어를 다른 방법으로 이전하기 전에 잠금 해제됩니다.
lock 을 이용해서 교착 상태를 방지하는 방법인데, 교착 상태에 대해서 알고 싶다면 스레드 관련해서 공부를 하면 됩니다.
'Language > Swift' 카테고리의 다른 글
swift computed property 연산 프로퍼티 (0) | 2022.08.23 |
---|---|
swift nested function (0) | 2022.08.22 |
[Swift] continue, fallthrough-switch, where-for, enumerated, zip, indices (0) | 2022.08.07 |
[Swift] guard 문 (0) | 2022.08.07 |
[Swift] C에 대해서 알면 좀 쉬울지도? swift 문법 (0) | 2022.08.02 |
@jaewpark :: 코스모스, 봄보다는 늦을지언정 가을에 피어나다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!