ARC는 Automatic Reference Counting의 약자로, Swift에서 메모리를 효율적으로 관리하기 위해 사용되는 메모리 관리 기법입니다. 이는 Objective-C의 메모리 관리 방식을 자동화한 형태로, 프로그래머가 명시적으로 메모리를 해제하지 않아도 메모리 누수를 방지할 수 있도록 설계되었습니다.
ARC의 동작 원리
ARC는 Class instance의 참조 횟수(Reference count)를 추적합니다.
- 각 class instance는 메모리에서 할당될 때 참조 카운터를 가지고 있습니다.
- 다른 객체나 변수가 해당 instance를 참조할 때 참조 카운터가 증가합니다.
- 참조가 해제될 때(예: 변수가 scope를 벗어날 때) 참조 카운터가 감소합니다.
- 참조 카운터가 0이 되면 ARC는 해당 메모리를 자동으로 해제합니다.
class Person {
var name: String
init(name: String) {
self.name = name
print("\(name) is initialized")
}
deinit {
print("\(name) is deinitialized")
}
}
var person1: Person? = Person(name: "John") // 참조 카운터: 1
person1 = nil // 참조 카운터: 0, 메모리 해제
ARC가 적용되는 타입
- ARC는 참조 타입인 클래스에만 적용됩니다.
- 값 타입(Value Type)인 구조체(struct)나 열거형(enum)은 ARC와 무관합니다. 값 타입은 복사 시 별도의 독립된 메모리를 사용하므로, 참조 관리가 필요하지 않습니다.
ARC의 장점
- 프로그래머가 수동으로 메모리를 관리하지 않아도 되므로 코드가 간결해집니다.
- 메모리 누수 문제를 방지할 수 있습니다(순환 참조 문제를 제외하면).
ARC와 성능 최적화
- 참조 횟수 증가/감소는 비용이 들기 때문에, 성능 민감한 코드에서는 ARC가 많이 호출되지 않도록 설계하는 것이 중요합니다.
- 값 타입(struct)을 활용하거나, 약한 참조를 적절히 사용하면 성능이 개선될 수 있습니다.
'App Development > Swift' 카테고리의 다른 글
Swift의 매개변수(parameter) 정리하기 (0) | 2024.11.30 |
---|---|
Swift에서의 completion (0) | 2024.11.26 |
Swift의 Closure 란? (0) | 2024.11.25 |
Swift에서의 Class (0) | 2024.11.24 |
Swift 분기 처리 정의와 종류 (0) | 2024.11.23 |