나의 기록, 현진록

[Swift] 11.2 인스턴스 소멸 본문

Programming/Swift

[Swift] 11.2 인스턴스 소멸

guswlsdk 2021. 7. 26. 14:54
반응형

스위프트 프로그래밍 3판 - 야곰 지음

 

11.2 인스턴스 소멸

클래스의 인스턴스는 디이니셜라이저를 구현할 수 있습니다. 디이니셜라이저는 이니셜라이저와 반대 역할을 합니다. 즉, 메모리에서 해제되기 직전 클래스 인스턴스와 관련하여 원하는 정리 작업을 구현할 수 있습니다. 디이니셜라이저는 클래스의 인스턴스가 메모리에서 소멸되기 바로 직전에 호출됩니다. deinit 키워드를 사용하여 디이니셜라이저를 구현하면 자동으로 호출됩니다. 디이니셜라이저는 클래스의 인스턴스에만 구현할 수 있습니다.

 

스위프트는 인스턴스가 더 이상 필요하지 않으면 자동으로 메모리에서 소멸시킵니다. 만약 인스턴스 내부에서 파일을 불러와 열어보는 등의 외부 자원을 사용했다면 인스턴스를 소멸하기 직전에 파일을 다시 저장하고 닫아주는 등의 부가 작업을 해야합니다. 그런 경우 디이니셜라이저는 굉장히 유용하게 사용할 수 있습니다. 

 

 

class SomeClass{
    deinit{
        print("Instance will be deallocated immediately")
    }
}

var instance: SomeClass? = SomeClass()
instance = nil

 

 

class FileManager{
    var fileName: String
    
    init(fileName: String){
        self.fileName = fileName
    }

    func openFile(){
        print("Open File: \(self.fileName)")
    }
    func modifyFile(){
        print("Modify File: \(self.fileName)")
    }
    func writeFile(){
        print("Write File: \(self.fileName)")
    }
    func closeFile(){
        print("Close File: \(self.fileName)")
    }
    
    deinit {
        print("Deinit instance")
        self.writeFile()
        self.closeFile()
    }
    
}

var fileManager: FileManager? = FileManager(fileName: "abc.txt")

if let manager: FileManager = fileManager{
    manager.openFile()
    manager.modifyFile()
}

fileManager = nil

 

 

 

반응형