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