안녕하세요. 도미닉입니다.
오늘은 Defer 에 대해서 알아보겠습니다.
Defer 를 들어본 분도 계실 것 같고 안들어본 분들도 계실 것 같습니다.
한번 알아보죠.
Defer 란 무엇인가?
defer 를 번역해보면 “지연하다” 라는 동사입니다.
defer 구문은 현재 스코프를 벗어날 때 실행하도록 지연합니다.
defer 의 예제는 무엇이 있는가?
첫번째 예제입니다.
print(“4”) 소스가 defer 안에 없었다면 1,4,2,3,5 순으로 출력이 되었을 겁니다.
defer 구문 안에 print(“4”) 가 들어가게 되면서 doit() 메서드가 끝날 때 실행되게 되었습니다.
위에 소스는 1,2,3,4,5 순서로 출력됩니다.
두번째 예제입니다.
파일을 열고 상태메시지가 OK 가 아니면 메소드가 종료됩니다.
guard 문 아래에 file.close() 가 있었다면 파일을 닫지 않고 메소드가 종료될 것입니다.
defer 문을 활용해 loggin() 메소드가 종료될 때 파일이 닫히는 것을 보장할 수 있습니다.
세번째 예제입니다.
defer 구문을 여러번 작성하면 역순으로 실행됩니다.
따라서 아래에 있는 print 2 부터 실행되고 그 다음에 print 1 이 실행됩니다.
정리
defer 을 사용하면 어떤 메소드가 종료됬을 때 혹은 어떤 스코프가 종료될 때 원하는 동작을 수행할 수 있었습니다.
파일을 열거나, 데이터베이스 연결이나 네트워크 연결을 만들어 놓고 작업하는 중 예외를 만나는 경우에도 안전하게 리소스를 닫는 처리를 할 수 있습니다.
글 읽어주셔서 감사합니다.