[swift] ARC 개요

스위프트에서는 ARC (Automatic Reference Counting) 라고 불리는 자동 참조 계수 기능을 통해 메모리 관리를 지원합니다.

ARC가 하는 일

ARC는 인스턴스에 대한 참조 횟수를 추적하여 인스턴스가 더 이상 필요하지 않을 때 메모리에서 자동으로 해제합니다.

예를 들어, 다음과 같이 변수에 인스턴스를 할당할 때, 해당 인스턴스의 참조 횟수가 증가합니다.

var obj1: MyClass? = MyClass()

또한, 다른 변수에 해당 인스턴스를 할당하거나 변수가 스코프를 벗어날 때 참조 횟수가 감소합니다.

강한 참조 순환 문제

ARC는 강한 참조 순환 문제 (Strong Reference Cycles) 를 방지하기 위해 weakunowned 참조를 사용할 수 있도록 합니다.

class Person {
    var name: String
    weak var apartment: Apartment?
    
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    var tenant: Person?
    
    init(unit: String) {
        self.unit = unit
    }
}

위의 예시에서 Person 클래스와 Apartment 클래스가 서로를 강한 참조하고 있기 때문에 메모리 누수가 발생할 수 있습니다. 따라서 weak 키워드를 사용하여 순환 참조를 방지합니다.

ARC는 스위프트에서 메모리 관리의 부담을 덜어주며, 순환 참조 문제를 방지하여 안정성을 높이는 데 중요한 역할을 합니다.

더 자세한 내용은 스위프트 공식 문서를 참고하세요.