본문 바로가기
iOS/swift

[Swift] 메모리 관리 기법 (ARC)

by SiO2whocode 2025. 3. 14.

ARC (Automatic Reference Counting)

힙에 할당되는 참조 타입을 해당 값이 더 이상 필요하지 않을 때, 자동으로 메모리에서 해제해주는 기법

이를 통해 개발자가 직접 참조타입에 메모리 할당, 해제를 해주지 않아도 자동으로 메모리 할당과 해제가 이루어져 메모리 누수를 막을 수 있다.

 

RC(Reference Count)를 이용한 메모리 관리 기법으로, 힙에 할당되는 인스턴스마다 RC를 갖고 있음.

해당 인스턴스가 참조되고 있는 횟수를 나타내며, 0이 되면 자동으로 해제 된다.

  • 참조 횟수(RC)를 증가시키는 경우
    • 인스턴스를 새로 생성할 때 (ex. 클래스 인스턴스 생성 → 변수에 대입)
    • 기존 인스턴스를 다른 변수에 새로 대입할 때
  • 참조 횟수(RC)를 감소시키는 경우
    • 인스턴스를 가리키던(참조하던) 변수가 메모리에서 해제되었을 때 (ex. 해당 변수가 속한 함수가 끝났을 때)
    • 인스턴스를 저장했던 변수에 nil을 할당할 때, 그 변수에 다른 값을 할당할 때
    • 인스턴스가 다른 인스턴스의 프로퍼티로 들어가는 경우, 상위 인스턴스가 메모리에서 해제될 때
      (그에 속한 인스턴스의 참조횟수 -1 (메모리 해제 X))

Garbage Collection(GC)과의 차이점

  • RC(Reference Counting) 방식은 컴파일 시에 참조 카운트를 계산함
    • → 개발자가 해제 시점을 파악할 수 있음
    • → 순환참조 발생시 인스턴스가 해제되지 않을 수 있음
  • CG(Garbage Collection) 방식은 런타임에도 계속 추적 계산함
    • → 개발자가 해제 시점을 파악하기 어려움
    • → 메모리 해제가 안되는 경우가 드뭄
    • → 런타임에도 계속 추적하기 때문에 오버헤드가 듬
728x90