Swift
컴파일 타임 / 런타임
kkimin
2021. 5. 12. 16:26
ARC 자동 메모리 관리는 컴파일 타임에 작동한다.
당연한 말 같지만 내가 정확하게 컴파일 타임과 런타임을 구분하고 있는게 맞는지 아래와 같이 서술해본다.
먼저 Swift는 정적(static) 타입, 동적(dynamic) 타입이 있다.
결론 :
정적타입 검사는 컴파일 타임때
동적타입 검사는 런타임때 발생한다.
아주 쉬운 예시
// 정적 데이터의 컴파일 검사 예시
let text: String = 1 // 컴파일때 에러남
let text: String = "" // 컴파일때 검사해서 통과~
// 동적 데이터의 런타임 검사 예시
var testData: Any = Test()
if let data = testData as? ErrorType {
// 알수 없지만 런타임 중 에러가 날 수도 있다.(예시: 소스코드상 알 수 없는 외부라이브러리 등)
}
사실 이걸 적게되는 이유는 ARC가 컴파일 타임에 작동하기때문이다! HOW? 아래를 참고했다.
ARC가 컴파일 타임에 실행되는데, 어떻게 동적으로 실행되는 것들의 Reference Count를 세고 메모리 관리를 할 수 있을까요?
ARC는 컴파일 타임에 자동으로 retain, release를 적절한 위치에 삽입하는 방식으로 메모리를 관리합니다. Heap 영역에 Reference형 자료들이 얼마나 참조되고 있는지 카운팅하고, 이 Reference Count를 통해서 참조 카운트가 0이 될 때, deinit을 통해 해제시키게 됩니다.
출처: https://beenii.tistory.com/117 [끄적이는 개발노트]
728x90