ARC 기초: strong / weak / unowned
ARC 참조 카운팅을 배우고, 메모리 누수를 방지하기 위해 strong , weak , unowned 를 언제 사용하는지 알아봅니다.
ARC 기초: strong / weak / unowned은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
1분 만에 이해하는 ARC
Swift는 ARC(자동 참조 계산)를 사용합니다. 각 강한 참조는 클래스 인스턴스의 참조 횟수를 늘립니다. 참조 횟수가 0으로 내려가면 deinit이 실행되고 메모리가 해제됩니다.
기본값은 강한 참조
강한 참조가 기본값입니다. 마지막 강한 참조가 사라지면 deinit이 호출됩니다.
final class Person {
let name: String
init(_ name: String) { self.name = name; print("init:", name) }
deinit { print("deinit:", name) }
}
var p: Person? = Person("Ada")
p = nil // ARC count -> 0, triggers deinit순환 예시
양방향 강한 참조는 참조 순환을 만듭니다. ARC가 메모리를 해제할 수 없어 누수가 발생합니다.
final class A {
var b: B?
deinit { print("A deinit") }
}
final class B {
var a: A?
deinit { print("B deinit") }
}
var a: A? = A()
var b: B? = B()
a?.b = b // strong
b?.a = a // strong
a = nil // no deinit (cycle)
b = nil // still no deinit (leak)약한 참조
순환을 피하려면 한쪽을 약한 참조로 만드십시오. 약한 참조는 옵셔널이며 객체가 할당 해제되면 자동으로 nil이 됩니다.
final class A2 {
weak var b: B2? // weak breaks the strong cycle
deinit { print("A2 deinit") }
}
final class B2 {
var a: A2?
deinit { print("B2 deinit") }
}
var a2: A2? = A2()
var b2: B2? = B2()
a2?.b = b2 // weak
b2?.a = a2 // strong
a2 = nil // A2 deinit runs
b2 = nil // B2 deinit runs비소유 참조
참조 대상 객체가 이 참조보다 더 오래 유지될 것이 확실할 때 비소유 참조를 사용합니다. 비소유 참조는 옵셔널이 아니며 nil로 설정되지 않습니다. 객체가 할당 해제된 후 접근하면 충돌이 발생하므로 수명을 보장해야 합니다.
final class Customer {
let name: String
var card: CreditCard?
init(_ name: String) { self.name = name }
deinit { print("Customer deinit") }
}
final class CreditCard {
unowned let owner: Customer // never optional; owner must outlive card
init(owner: Customer) { self.owner = owner }
deinit { print("CreditCard deinit") }
}
var cust: Customer? = Customer("Lars")
cust!.card = CreditCard(owner: cust!)
cust = nil // deallocates both (no cycle)팁과 패턴
팁:
- 기본값으로 강한 참조를 사용합니다.
- 약한 참조로 순환을 끊습니다(대리자는 일반적으로 약한 참조입니다).
- 수명이 보장될 때만 비소유 참조를 사용합니다(예: 자식 → 부모).
- 클래스는 참조 타입이며, 구조체와 열거형에는 ARC 규칙이 필요하지 않습니다.
약한 참조와 비소유 참조
빠른 확인: 언제 약한 참조와 비소유 참조 중 하나를 선택합니까?
복습
복습: 남아 있는 강한 참조가 없으면 ARC가 객체를 해제합니다. 약한 참조(옵셔널) 또는 비소유 참조(수명 보장)로 순환을 방지합니다. 안전한 범위에서 가장 약한 소유 방식을 선택합니다.
자주 묻는 질문
“ARC 기초: strong / weak / unowned” 강의는 무료인가요?
네 — “ARC 기초: strong / weak / unowned” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“ARC 기초: strong / weak / unowned”에서 뭘 배우나요?
ARC 참조 카운팅을 배우고, 메모리 누수를 방지하기 위해 strong , weak , unowned 를 언제 사용하는지 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.
“ARC 기초: strong / weak / unowned” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ARC 기초: strong / weak / unowned
- 참조 순환과 weak/unowned를 통한 해소
- 공유를 줄이는 값 타입