[swift] 강한 참조와 약한 참조

애플의 Swift 프로그래밍 언어는 강한 참조약한 참조라는 메모리 관리 개념을 사용합니다. 이 두 가지 참조 유형은 메모리 관리와 순환 참조 문제를 다루는 데 중요합니다.

강한 참조

강한 참조는 객체에 대한 일반적인 참조 방식으로, 객체를 참조하는 변수나 상수가 있는 동안 해당 객체가 메모리에 유지됩니다. 다시 말해, 객체에 대한 강한 참조가 있다면 해당 객체는 메모리에서 해제되지 않습니다.

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person?
var person2: Person?
var person3: Person?

person1 = Person(name: "Alice")
person2 = person1   // person2가 person1을 강한 참조
person3 = person1   // person3도 person1을 강한 참조

person1 = nil   // person1이 nil이 되었지만, person2와 person3는 여전히 person1을 강한 참조

위의 예제에서 person1nil이 되었지만, person2person3은 여전히 person1을 강한 참조하기 때문에 객체는 메모리에서 해제되지 않습니다.

약한 참조

약한 참조는 참조하고 있는 객체에 대한 추가적인 참조 계수를 증가시키지 않으며, 객체가 메모리에서 해제되면 자동으로 nil로 설정됩니다. 순환 참조를 방지하는 데 사용됩니다.

class Apartment {
    weak var tenant: Person?
}

person1 = nil   // person1을 nil로 설정하면 person2와 person3도 자동으로 nil이 됨

위의 예제에서 tenant 속성은 약한 참조로 선언되었기 때문에, person1nil이 되면 tenant 또한 nil로 자동 설정됩니다.

강한 참조약한 참조는 메모리 관리와 순환 참조 문제를 다루는 데 중요한데, 올바르게 사용하면 메모리 누수와 순환 참조를 방지할 수 있습니다.

참고문헌: 메모리 관리 - 강한 참조와 약한 참조