🔥 소개
Swift에서 클래스를 다룰 때, 우리는 주로 클래스의 인스턴스를 생성하고 초기화하는 방법에 대해 먼저 배웁니다. 인스턴스를 생성할 때는 초기화 과정을 통해 필요한 설정을 하고, 속성의 초기값을 할당하죠. 이 모든 과정은 클래스 인스턴스를 사용하기 위한 준비 단계라고 할 수 있습니다.
그런데 클래스 인스턴스를 다 사용하고 난 후에는 어떤 일이 벌어질까요? 바로 deinitialization
, 즉 정리 작업이 이루어집니다. Deinitialization은 클래스 인스턴스가 메모리에서 해제되기 직전에 호출되는 특별한 메서드인 deinitializer
를 통해 수행됩니다.
deinitializer
는 deinit
키워드를 사용하여 작성하며, 이는 init
키워드로 작성하는 초기화 메서드와 유사합니다. 하지만 deinitializer는 클래스 타입에서만 사용할 수 있다는 점이 다릅니다.
왜 deinitializer가 필요할까요? 클래스 인스턴스는 종종 외부 리소스를 사용하거나 다른 객체와의 연결을 가지고 있습니다. 예를 들어, 파일을 열어서 데이터를 읽거나 쓰는 클래스라면 파일 핸들을 가지고 있겠죠. 또는 네트워크 연결을 관리하는 클래스라면 소켓 등의 자원을 할당받아 사용할 것입니다.
이렇게 클래스 인스턴스와 연관된 외부 리소스들은 인스턴스가 메모리에서 해제될 때 함께 정리되어야 합니다. 그렇지 않으면 리소스 누수(resource leak)가 발생하여 앱의 성능에 악영향을 줄 수 있기 때문이죠. Deinitializer는 바로 이런 정리 작업을 수행하기에 최적화된 메서드입니다.
Deinitializer 내부에서는 인스턴스가 사용한 리소스를 해제하고, 필요한 마무리 작업을 진행합니다. 파일을 닫고, 소켓 연결을 끊고, 메모리를 해제하는 등의 작업이 이루어지죠. 이를 통해 클래스 인스턴스는 깔끔하게 정리되어 메모리에서 사라질 수 있습니다.
지금부터 deinitializer의 문법과 동작 원리, 그리고 실제 활용 예제를 하나씩 살펴보도록 하겠습니다. Deinitialization은 클래스를 다룰 때 꼭 알아두어야 할 중요한 개념이니, 차근차근 이해해 보시기 바랍니다. 그럼 시작해 볼까요?