리소스 정리를 위한 defer
파일을 닫고 리소스를 안정적으로 해제합니다.
리소스 정리를 위한 defer은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
정리 문제
파일, 잠금, 연결과 같은 자원은 해제해야 합니다. 특정 실행 경로에서 해제를 잊으면 누수가 발생합니다.
func work() {
print("acquire resource")
print("use resource")
print("release resource")
}
work()defer가 해제를 보장함
해제 작업을 defer에 넣으면 함수가 어떤 방식으로 종료되더라도 해당 작업이 실행되도록 보장할 수 있습니다.
func work() {
print("acquire resource")
defer { print("release resource") }
print("use resource")
}
work()파일 핸들 시뮬레이션
여기서는 간단한 구조체로 열기와 닫기를 모델링합니다. defer는 close가 항상 호출되도록 보장합니다.
struct File {
let name: String
func close() { print("closed", name) }
}
func readFile() {
let f = File(name: "data.txt")
defer { f.close() }
print("reading", f.name)
}
readFile()잠금 획득과 해제
잠금을 모델링해 보십시오. 잠금을 획득한 다음 해제를 defer로 예약하면 임계 구역의 잠금이 항상 해제됩니다.
func critical() {
print("lock acquired")
defer { print("lock released") }
print("critical section work")
}
critical()설정 바로 옆에서 정리하기
정리 작업을 설정 작업 바로 뒤에 두면 두 작업의 연결 관계가 분명해지고 잊기 어려워집니다.
func session() {
print("connect")
defer { print("disconnect") }
print("send request")
print("receive response")
}
session()여러 자원
여러 자원을 사용할 때는 각 설정 작업 바로 뒤에 정리 작업을 선언하십시오. LIFO 순서가 자원을 올바르게 닫습니다.
func transaction() {
print("open connection")
defer { print("close connection") }
print("begin transaction")
defer { print("commit transaction") }
print("run query")
}
transaction()카운터 재설정
defer를 사용하면 범위가 끝날 때 플래그 재설정과 같이 상태를 복원할 수 있습니다.
func tracked() {
var active = true
defer { active = false; print("active reset to", active) }
print("active is", active)
}
tracked()중복 방지
defer가 없다면 모든 종료 경로에서 정리 작업을 반복해야 합니다. defer를 사용하면 한 번만 작성하면 됩니다.
func validate(_ ok: Bool) {
print("start")
defer { print("cleanup done once") }
if !ok {
print("invalid")
return
}
print("valid")
}
validate(false)계산된 값으로 정리하기
defer를 사용하면 처리된 항목 수와 같은 최종 측정값을 기록할 수 있습니다.
func batch() {
var processed = 0
defer { print("processed", processed, "items") }
for _ in 1...3 { processed += 1 }
}
batch()임시 상태 복원
defer를 사용하면 설정을 임시로 변경한 뒤 안정적으로 복원할 수 있습니다.
func withVerbose() {
var verbose = false
verbose = true
defer { verbose = false; print("verbose restored:", verbose) }
print("verbose during work:", verbose)
}
withVerbose()권장 사항
해제해야 하는 것을 획득할 때마다 바로 다음 줄에서 defer로 해제를 등록하십시오.
func handle() {
print("acquire")
defer { print("release") }
print("process")
}
handle()빠른 확인
정리에 defer를 사용하는 방법을 테스트합니다.
요약
자원을 획득한 직후 defer로 해제를 등록하십시오. 정리 작업은 모든 종료 경로에서 실행되도록 보장되며, 정리를 설정 작업 옆에 유지하고 반환 경로마다 정리 작업을 중복해서 작성하지 않아도 됩니다.
func work() {
print("acquire")
defer { print("release") }
print("use")
}
work()AI 튜터와 함께 Swift을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 122
- 레슨
- 409
자주 묻는 질문
“리소스 정리를 위한 defer” 강의는 무료인가요?
네 — “리소스 정리를 위한 defer” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“리소스 정리를 위한 defer”에서 뭘 배우나요?
파일을 닫고 리소스를 안정적으로 해제합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“리소스 정리를 위한 defer” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- defer의 작동 방식
- 여러 defer 블록의 실행 순서
- 리소스 정리를 위한 defer
- 오류와 조기 반환에서의 defer