0Pricing
Swift Academy · 강의

초기화 해제 구문과 메모리 수명 주기

객체가 할당 해제되기 전에 deinit으로 리소스를 정리합니다.

초기화 해제 구문과 메모리 수명 주기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

시작하기

스위프트 클래스는 인스턴스가 메모리에서 해제되기 직전에 실행되는 `deinit`을 정의할 수 있습니다. 전체 객체 생명 주기인 init → 사용 → deinit을 이해하는 것은 자원 관리의 핵심입니다.

초기화 해제란 무엇인가요?

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

초기화 해제 구문 규칙

• 클래스에서만 사용할 수 있으며 구조체와 열거형에는 `deinit`이 없습니다 • 매개변수나 반환 값이 없습니다 • 괄호를 사용하지 않습니다: `deinit { }`이며 `deinit() { }`가 아닙니다 • ARC가 자동으로 호출하므로 직접 호출하지 않습니다 • 하위 클래스의 `deinit` 다음에 상위 클래스 `deinit`이 자동으로 호출됩니다

정리 사용 사례

`deinit`의 일반적인 사용 사례: • 네트워크 연결 닫기 • 알림 관찰자 제거: `NotificationCenter.default.removeObserver(self)` • 타이머 무효화 • 파일 핸들이나 데이터베이스 연결 닫기

참조 수와 생명 주기

ARC는 객체를 가리키는 강한 참조의 수를 추적합니다: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

하위 클래스 초기화 해제 연쇄

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

weak로 참조 유지 방지

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` `owner`가 nil로 설정되면 Dog가 참조를 보유하고 있더라도 `Owner`를 메모리에서 해제할 수 있습니다.

참조 순환은 초기화 해제를 방지합니다

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

타이머 무효화 패턴

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

계측기를 사용한 누수 탐지

`deinit`이 호출되지 않는다면 참조 순환이 있을 가능성이 큽니다. 엑스코드 계측기의 누수 템플릿을 사용하여 할당되었지만 메모리에서 해제되지 않은 객체를 탐지할 수 있습니다.

빠른 확인

어떤 형식이 `deinit`을 정의할 수 있나요?

복습

핵심 내용: • `deinit { }` — 메모리에서 해제되기 전에 자원을 정리합니다 • 클래스에서만 사용할 수 있으며, 하위 클래스 다음에 상위 클래스 초기화 해제가 자동으로 호출됩니다 • ARC가 초기화 해제 시점을 결정합니다(참조 수가 0으로 감소할 때) • 참조 순환은 초기화 해제를 방지하므로 `weak`/`unowned`로 끊어야 합니다 • 초기화 해제가 호출되지 않는 객체를 찾으려면 계측기의 누수 도구를 사용합니다 과정을 완료했습니다! 다음 주제: 열거형 패턴과 상태 머신

자주 묻는 질문

“초기화 해제 구문과 메모리 수명 주기” 강의는 무료인가요?

네 — “초기화 해제 구문과 메모리 수명 주기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“초기화 해제 구문과 메모리 수명 주기”에서 뭘 배우나요?

객체가 할당 해제되기 전에 deinit으로 리소스를 정리합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“초기화 해제 구문과 메모리 수명 주기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 클래스 상속과 super 키워드
  2. override, final 및 하위 클래스화 방지
  3. 형 변환: is, as?, as! 및 as
  4. 초기화 해제 구문과 메모리 수명 주기
← Swift Academy(으)로 돌아가기