[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을 강한 참조
위의 예제에서 person1
이 nil
이 되었지만, person2
와 person3
은 여전히 person1
을 강한 참조하기 때문에 객체는 메모리에서 해제되지 않습니다.
약한 참조
약한 참조는 참조하고 있는 객체에 대한 추가적인 참조 계수를 증가시키지 않으며, 객체가 메모리에서 해제되면 자동으로 nil
로 설정됩니다. 순환 참조를 방지하는 데 사용됩니다.
class Apartment {
weak var tenant: Person?
}
person1 = nil // person1을 nil로 설정하면 person2와 person3도 자동으로 nil이 됨
위의 예제에서 tenant
속성은 약한 참조로 선언되었기 때문에, person1
이 nil
이 되면 tenant
또한 nil
로 자동 설정됩니다.
강한 참조와 약한 참조는 메모리 관리와 순환 참조 문제를 다루는 데 중요한데, 올바르게 사용하면 메모리 누수와 순환 참조를 방지할 수 있습니다.
참고문헌: 메모리 관리 - 강한 참조와 약한 참조