⭐ 참조타입은 메모리 해제가 중요한 문제이다.
왜냐하면? 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면
메모리 자원 낭비 + 성능 저하로 이어지기 때문이다.
이를 해결하고자 스위프트에서는 메모리 관리 기법인 ARC를 사용한다.
✔ RC: Reference Counting 으로 참조 횟수 계산을 뜻한다.
(구조체, 열거형은 값 타입으로 적용이 안된다.)
ARC 사용
Person 클래스를 선언하고, init(), deinit을 통해 인스턴스 생성과 해제에 따른 print()문을 실행한다.
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
Person 클래스 타입의 reference 변수를 선언한다.
모두 옵셔널 변수이고, 초기값은 nil을 갖는다.
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 변수에 Person 인스턴스를 참조시키고, 나머지 두 변수들은 reference1을 할당한다.
이 경우 reference2, 3은 Person 인스턴스를 참조하게 된다.
이 시점에서 Person 인스턴스에 대한 참조 횟수는 3이 된다.
reference1 = Person(name: "John Appleseed")
// Prints "John Appleseed is being initialized"
reference2 = reference1
reference3 = reference1
reference1, 2 두 변수의 참조를 해제하더라도
reference3이 Person 인스턴스에 대해 참조하고 있기 때문에
Person 인스턴스는 해제되지 않는다.
reference1 = nil
reference2 = nil
reference3에 nil을 할당하고 나서야 더 이상 Person 인스턴스를 참조하고 있는 것이 없기 때문에 ARC가 Person 인스턴스를 메모리에서 해제한다.
reference3 = nil
// Prints "John Appleseed is being deinitialized"
'Swift > 기본' 카테고리의 다른 글
DispatchQueue.main과 DispatchQueue.global (1) | 2024.04.20 |
---|---|
ARC 2편 - 강한 참조 순환 (0) | 2024.04.19 |
메모리 구조 (Code, Data, Stack, Heap) (1) | 2024.04.18 |
접근 제어자 (Access Control) (0) | 2024.04.17 |
서브스크립트 (1) | 2024.04.16 |