본문 바로가기

개발

Swift 자동 참조 카운팅 (Automatic Reference Counting)

728x90

Swift 자동 참조 카운팅 (Automatic Reference Counting, ARC)

Swift에서 자동 참조 카운팅 (ARC)은 메모리 관리를 자동으로 수행하는 강력한 기능입니다. 덕분에 개발자는 메모리 할당 및 해제를 직접 관리하지 않고도 코드에 집중할 수 있습니다. ARC는 다음과 같은 방식으로 작동합니다.

1. 기본 동작

  • 참조 카운팅: 각 인스턴스에는 참조 카운트가 할당됩니다. 인스턴스에 대한 참조가 추가될 때마다 카운트가 1씩 증가하고, 참조가 해제될 때마다 카운트가 1씩 감소합니다.
  • 메모리 해제: 참조 카운트가 0이 되면 인스턴스는 더 이상 참조되지 않음을 의미하며, ARC는 자동으로 해당 인스턴스를 메모리에서 해제합니다.

2. 장점

  • 편리성: 개발자가 직접 메모리 관리를 하지 않아도 되어 코드 작성이 더욱 간편하고 효율적입니다.
  • 안전성: 메모리 누수 및 오류를 방지하는 데 도움이 됩니다.
  • 예측 가능성: 메모리 사용량을 예측하기 쉬워져 메모리 관리가 용이해집니다.
  • 성능 향상: ARC는 메모리 할당 및 해제 작업을 자동으로 수행하기 때문에 성능 향상에 기여할 수 있습니다.

3. 참조 유형 및 값 유형

  • 참조 유형: 다른 인스턴스를 참조할 수 있는 타입입니다. 예를 들어, 클래스, 구조체, 열거형 등이 여기에 속합니다.
  • 값 유형: 다른 인스턴스를 참조하지 않고 자체 값을 저장하는 타입입니다. 예를 들어, Int, Double, String, Bool 등이 여기에 속합니다.

4. 강한 참조 및 약한 참조

  • 강한 참조: 참조 카운트를 1씩 증가시키는 참조입니다. 인스턴스에 대한 강한 참조가 있는 한 해당 인스턴스는 메모리에서 해제되지 않습니다.
  • 약한 참조: 참조 카운트를 증가시키지 않는 참조입니다. 인스턴스에 대한 다른 강한 참조가 있는 경우에만 약한 참조가 유지됩니다.

5. ARC 제외 사항

  • Unmanaged 타입: ARC의 자동 관리 범위 밖에 있는 메모리를 다루기 위한 타입입니다. 직접 메모리 할당 및 해제를 수행해야 합니다.
  • copy 메서드: 값 유형의 인스턴스를 복사할 때 사용되는 메서드입니다. 복사된 인스턴스는 별도의 참조 카운트를 가지므로 메모리 관리에 주의해야 합니다.
  • 순환 참조: 서로를 참조하는 두 개 이상의 인스턴스가 발생하는 경우 메모리 누수가 발생할 수 있습니다.

 

주의: ARC 강력한 기능이지만, 제한 사항도 존재합니다. 따라서 ARC 사용하기 전에 Apple 공식 문서를 참고하고 주의해서 사용하는 것이 좋습니다. 또한, 복잡한 메모리 관리 상황에서는 직접 메모리 관리를 수행해야 수도 있습니다.

'개발' 카테고리의 다른 글

Swift 접근 제어 (Access Control)  (1) 2024.07.05
Swift 메모리 안전성 (Memory Safety)  (0) 2024.07.05
Swfit 불투명한 타입 (Opaque Types)  (0) 2024.07.05
Swfit 제너릭 (Generics)  (0) 2024.07.05
Swift 프로토콜 (Protocols)  (1) 2024.07.05