티스토리 뷰

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함