[swift] defer 키워드

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 키워드는 함수나 코드 블록의 실행이 완료된 후에 실행되어야 하는 코드를 지정하는 데 도움을 줍니다. 주로 자원 해제와 같은 중요한 작업을 처리하는 데 사용되며, 중첩하여 사용할 수도 있습니다. 코드의 가독성을 향상시키고, 자원 누수를 방지하는 데 유용한 기능이므로 적절히 활용하는 것이 좋습니다.


참고: