Swift에서 defer
키워드는 함수나 코드 블록의 실행이 완료된 후에 실행되어야 하는 코드를 지정하는 데 사용됩니다. defer 뒤에 작성된 코드는 항상 실행되며, 함수나 블록의 실행이 어떤 방식으로 끝나더라도 실행됩니다. 이러한 특징은 코드 정리나 자원 해제 등에 유용하게 활용될 수 있습니다.
사용 예시
전통적으로, defer는 자원 해제와 같이 반드시 수행되어야 하는 작업을 처리하는 데 많이 사용됩니다. 다음은 파일을 열고 작업을 수행한 뒤 파일을 자동으로 닫는 예시입니다:
func processFile() throws {
let file = try openFile()
defer {
file.close()
}
// 파일에서 데이터를 읽거나 쓰는 작업 수행
}
위의 예시에서 openFile()
함수는 파일을 열고 file
변수에 할당합니다. 그런 다음 defer
블록을 사용하여 파일을 닫는 작업을 예약합니다. processFile()
함수의 실행이 종료되는 시점에 file.close()
가 호출되어 파일을 자동으로 닫게 됩니다. 이를 통해 자원 해제 코드를 깜빡하거나 누락하는 것을 방지할 수 있습니다.
중첩된 defer 문
defer 문은 중첩하여 사용할 수도 있습니다. 이렇게 하면 여러 개의 작업을 예약할 수 있으며, 마지막으로 예약된 작업부터 역순으로 실행됩니다. 다음은 중첩된 defer 문을 사용한 예시입니다:
func processFile() throws {
let file = try openFile()
defer {
file.close()
}
// 다른 작업 수행
defer {
// 다른 예약된 작업
}
// 더 많은 작업 수행
}
위의 예시에서는 processFile()
함수 안에서 두 개의 defer 블록이 사용되었습니다. 마지막으로 예약된 블록인 file.close()
가 먼저 실행되고, 그 다음에는 두 번째 defer 블록이 실행됩니다.
정리
Swift의 defer
키워드는 함수나 코드 블록의 실행이 완료된 후에 실행되어야 하는 코드를 지정하는 데 도움을 줍니다. 주로 자원 해제와 같은 중요한 작업을 처리하는 데 사용되며, 중첩하여 사용할 수도 있습니다. 코드의 가독성을 향상시키고, 자원 누수를 방지하는 데 유용한 기능이므로 적절히 활용하는 것이 좋습니다.
참고: