본문 바로가기

개발

Swift 초기화 해제 (Deinitialization in Swift)

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. 참고 자료