HIT해

[Swift 기초문법 - 66] defer 본문

Swift/Swift 기초문법

[Swift 기초문법 - 66] defer

힛해 2024. 8. 21. 01:14
728x90

defer란?

Swift에서 defer문은 특정 코드 블록이 종료될 때 실행되도록 보장하는 데 사용된다.

이는 주로 리소스를 정리하거나 상태를 복구하는 등의 작업을 처리하는 데 유용하다.

defer 블록은 해당 스코프의 마지막에 실행되며 함수 또는 메서드가 종료될 때 호출된다.

 

defer 기본 개념

defer는 코드의 특정 부분이 실행되기 전에 defer 블록 안의 코드가 실행되도록 보장한다.

이를 통해 함수가 정상적으로 종료되거나 오류가 발생하여 조기 종료될 때도 defer 블록의 코드가 실행된다.

 

기본 사용법

func exampleFunction() {
    print("Start")
    
    defer {
        print("This will be printed last")
    }
    
    print("Middle")
    print("End")
}

exampleFunction()

 

실행결과

Start
Middle
End
This will be printed last

 

여러개의 defer 블록

하나의 스코프에 여러 개의 defer 블록을 사용할 수 있고 defer 블록은 작성된 순서의 역순으로 실행된다.

func multipleDeferExample() {
    defer {
        print("First defer block")
    }
    
    defer {
        print("Second defer block")
    }
    
    print("Function execution")
}

multipleDeferExample()

 

실행결과

Function execution
Second defer block
First defer block

 

 

defer의 사용 예시

  • 리소스 정리 : 파일 핸들러나 데이터베이스 연결을 닫는 데 유용하다.
func readFile() {
    let file = openFile("example.txt")
    
    defer {
        closeFile(file)
    }
    
    // 파일 읽기 작업
}

 

  • 상태 복구 : 함수가 종료될 때 원래 상태로 복구해야 하는 경우 유용하다.
func performOperation() {
    let previousState = saveCurrentState()
    
    defer {
        restoreState(previousState)
    }
    
    // 작업 수행
}

 

 

defer 주의점

  • 조건문과의 관계 : defer 블록은 함수가 정상적으로 종료되든 예외가 발생하든 무조건 실행된다
  • 상태변경 : defer 블록 내의 코드는 함수의 최종 상태를 보장할 수 있다. 즉 예외 상황에서도 상태를 복구하는 데 유용하다.

 

정리하자면

앱을 만들었을 때 사용자가 페이지를 나갔을 때 또는 앱을 강제로 종료했을 때 전화가 왔을때 등 다양한 상황에 대처하기위해 자주 사용할 키워드 같다.