728x90
Swift 초기화 해제 (Deinitialization in Swift)
Swift 초기화 해제는 인스턴스가 더 이상 사용되지 않고 메모리에서 해제되기 직전에 자동으로 호출되는 코드 블록입니다. 초기화 해제를 사용하면 사용하지 않는 리소스를 해제하고 메모리 누수를 방지하는 데 도움이 됩니다.
1. 기본 구조
deinit {
// 해제 코드
}
- deinit: 초기화 해제 키워드입니다.
- // 해제 코드: 인스턴스가 해제되기 전에 실행되는 코드 블록입니다.
2. 활용 사례
- 외부 리소스 해제: 파일, 네트워크 연결, 데이터베이스 연결과 같은 외부 리소스를 해제하는 데 사용됩니다.
- 임시 데이터 삭제: 계산 중에 생성된 임시 데이터를 삭제하는 데 사용됩니다.
- 리스너 제거: 이벤트 리스너와 같은 등록된 객체를 제거하는 데 사용됩니다.
3. 예시
class Person {
var name: String
var fileHandle: FileHandle?
init(name: String) {
self.name = name
}
deinit {
fileHandle?.close() // 파일 핸들 해제
print("\(name) 인스턴스 해제됨")
}
}
let jimin = Person(name: "지민")
jimin.fileHandle = FileHandle(forWritingAtPath: "/tmp/test.txt")!
// ... 코드 사용
// jimin 인스턴스가 더 이상 사용되지 않고 메모리에서 해제됩니다.
4. 참고 사항
- 초기화 해제는 인스턴스가 메모리에서 해제되기 직전에만 호출됩니다. 따라서, 해제 코드에서 다른 인스턴스에 직접적으로 접근하거나 메서드를 호출하지 않도록 주의해야 합니다.
- 초기화 해제는 항상 실행되는 것은 아닙니다. 인스턴스가 강제로 해제되거나 예외가 발생하는 경우 초기화 해제가 실행되지 않을 수 있습니다.
- 여러 개의 상속 계층이 있는 경우, 상속받은 클래스의 초기화 해제가 먼저 호출되고, 그 다음에 부모 클래스의 초기화 해제가 호출됩니다.
5. 참고 자료
'개발' 카테고리의 다른 글
Swift 에러 처리 (Error Handling in Swift) (0) | 2024.07.05 |
---|---|
Swift 옵셔널 체이닝 (Optional Chaining) (1) | 2024.07.05 |
Swift 초기화 (Initialization) (0) | 2024.07.05 |
Swift 상속 (Inheritance in Swift) (0) | 2024.07.05 |
swift 서브 스크립트 (Subscripts) (0) | 2024.07.05 |