defer

2022. 5. 24. 15:02Swift 기본 문법

Swift를 사용하면서 거의 잘 활용하진 않았지만, 꽤나 흥미롭게 다가와 이 문법을 정리하게 되었다.

 

0. defer란 무엇인가?

현재 스코프를 벗어날 경우 가장 마지막에 실행이 되는 구문이다.

처음 보면 이해가 잘 가지 않겠지만 예시를 이해하다 보면 생각보다 금방 이해할 수 있다.

 

1. defer 활용해보기

위와 같이 구성을 한 후 결과를 출력해보았다.

 

그랬더니 b, a, c 순서대로 출력이 되는 것을 확인 할 수 있었다.

간단하게 설명하자면 defer는 함수의 가장 마지막에 실행이 된다는 것을 보장하는 것이다.

 

1-1. defer 여러개 쓰기

그렇다면 defer를 여러개로 쓰게 된다면 어떻게 될까?

이렇게 defer를 여러개 쓰게 된다면 2, 1 순서로 출력된다.

defer는 스택의 형식으로 사용되며 나중에 들어간 것이 먼저 출력되는 것이다.

 

1-2. defer의 실행

특이한 점이라면 defer를 읽기 전에 종료된다면 실행되지 않는다는 것이다.

이렇게 될 경우 2는 출력되지 않고 1만 출력되는 것이다.

 

1-3. defer의 중첩 사용

defer는 중첩해서 사용도 가능하다. 다만 이럴 경우 가장 바깥쪽 defer부터 실행된다.

이런 식으로 사용이 가능하며 1 ,2, 3 순서대로 실행이 된다.

 

2. defer의 활용

이는 NSLock에서 유용하게 사용된다.

NSLock에 관한 이야기는 나중에 다시 다루도록 하겠다.

이와 같이 멀티 스레딩 환경에서 Thread-Safe 하게 작업을 하기 위해 NSLock을 사용한다.

이 상황에서 함수가 길어지고 다양하게 분기가 나뉠 수 있지만 lock과 동시에 unlock을 defer를 통해 해 주게 된다면 위치상으로 붙어있기에 unlock의 관리가 편해지게 된다.

또한 unlock의 확실히 보장해줄 수 있어 해제를 하지 않을 경우에 생길 수 있는 deadlock 상황을 방지할 수 있다.

'Swift 기본 문법' 카테고리의 다른 글

lazy var 정리  (0) 2021.04.13