티스토리 뷰
ARC, RC, 강한 순환 참조에 대해서 설명하시오.
🔑 핵심 내용: ARC는 컴파일 타임에 retain, release 코드를 삽입 하여 메모리를 관리한다.
ARC
- ARC(Automatic Reference Counting)란 앱의 메모리 사용량을 추적하고 관리하는 도구로써 참조 타입 인스턴스가 더이상 필요하지 않을때 인스턴스에 할당된 메모리를 자동으로 해제 하여 메모리를 관리 합니다.
- 예전 Obj-C 에서는 retain, release 키워드를 작성하여 참조타입의 RC증가 및 감소 하도록 관리 하였는데, ARC는 retain, release 키워드를 컴파일타임에 자동으로 삽입하도록 하여 개발자가 메모리 관리 이슈를 줄이고 코딩 자체에 집줄 할 수 있도록 도와주는 역할을 하게 되었습니다.
RC
- reference타입의 인스턴스에는 value타입과 달리, 자신이 얼마나 참조되고 있는지를 나타내는데 이를 RC(Reference Counting)라고 합니다.
- 해당 인스턴스를 현재 누가 가리키고 있느냐 없느냐(참조하냐 안하냐)를 숫자로 나타낸 것입니다.
- 참조횟수가 증가할때 RC가 +1 증가하며, 참조횟수가 감소하게될경우 -1 감소하게 됩니다. RC가 0이되면 deinit을 호출하여 메모리에서 해제하게 됩니다.
강한 순환 참조
- 강한 순환 참조란 두가지 이상의 reference타입 인스턴스가 서로에 대한 강한 참조(Strong Reference) 상태를 가지고 있을때 발생합니다.
- 만약, 서로에 대한 참조가 해제되지 않는 경우 메모리에서 유지되며 이로인해 메모리 릭(memory leak)이 발생하게 됩니다.
꼬리질문
강한 순환 참조 문제를 해결할 수 있는 방법에는 어떤것들이 있을까요?
- weak 키워드와 unowned 키워드를 사용하여 RC를 증가시키지 않도록 하여 메모리에서 해제되지 않는 순환참조 문제를 해결할 수 있습니다.
약한참조 weak는 무엇인가요?
- 약한참조란 reference타입 인스턴스를 참조할시 RC를 증가시키지 않고 참조하던 인스턴스가 메모리에서 해제된 경우 자동으로 nil이 할당되어 메모리에서 해제 되도록 하는 것입니다.
- nil이 할당 되어야 하기 때문에 weak은 옵셔널 타입의 변수여야 하며 강한 순환 참조를 해결하기 위해 두개의 인스턴스중 한쪽을 weak 키워드를 사용할 수 있습니다.
미소유 참조 unowned는 무엇이고 weak과의 차이점은 무엇인가요?
- 약한참조와 같이 미소유참조도 RC를 증가시키지 않습니다.
- weak와의 차이점으로, 자신의 생명주기와 같거나 더 긴 경우에 unowned 키워드를 사용합니다.
- unowned 키워드가 붙은 프로퍼티는 자신보다 먼저 해제되지 않을 것이라고 가정하기 때문에 만약, 해제가 되어버린 경우 nil로 변경되지 않고 에러가 발생할 수 있습니다.
키워드 참고
retain :
- retain count(= reference count) 증가를 통해 현재 Scope에서 객체가 유지되는것을 보장
release :
- retain count(= reference count)를 감소시킴. retain 후에 필요 없을 때 release 함
memory leak
- 컴퓨터 프로그램이 필요하지 않은 메모리를 게속 점유하고 있는 현상.
참고 문서
https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
https://sujinnaljin.medium.com/ios-arc-%EB%BF%8C%EC%8B%9C%EA%B8%B0-9b3e5dc23814
https://jeonyeohun.tistory.com/373
'iOS > 면접질문 모음' 카테고리의 다른 글
App Bundle의 구조와 역할 (0) | 2022.09.12 |
---|---|
Reactive programming란 (0) | 2022.08.19 |
Generic 에 대해 설명하시오 (0) | 2022.07.30 |
@Main에 대해서 설명하시오. (0) | 2022.07.30 |