Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Swift에서 메모리 관리는 어떻게 이루어지나요? #24

Open
youn9k opened this issue Jan 4, 2025 · 3 comments
Open

Swift에서 메모리 관리는 어떻게 이루어지나요? #24

youn9k opened this issue Jan 4, 2025 · 3 comments

Comments

@youn9k
Copy link
Collaborator

youn9k commented Jan 4, 2025

  • ARC에 대해 설명한다
  • 레퍼런스 카운트에 대해 얘기한다
@hsw1920
Copy link
Owner

hsw1920 commented Jan 10, 2025

Q. Swift에서 메모리 관리는 어떻게 이뤄지나요?
A.
Swift에서 메모리 관리는 ARC(Automatic Reference Counting)를 통해 이뤄집니다.

ARC는 클래스 인스턴스와 같은 참조 타입의 메모리를 자동으로 관리하여 참조횟수인 Reference Count를 기반으로 참조가 0이 될 때 메모리를 해제합니다.

Swift 메모리 영역은 Code/Data/Stack/Heap 영역으로 나뉘어집니다.

이 중 Heap 영역은 참조 타입 인스턴스가 저장되는 영역이므로 프로그래머가 동적으로 메모리를 할당하고 해제해줘야합니다. Swift는 이 Heap 영역의 메모리를 ARC를 통해 자동으로 관리하여 메모리 누수를 줄이고 개발자가 메모리 해제 작업에 크게 신경쓰지 않도록 돕는다는 장점이 있습니다. 개발자는 ARC를 통해 메모리 누수를 발생할 수 있는 순환참조 문제를 조심해야합니다.

답변의도

  • Swift 메모리 영역과 ARC의 관계에 대해 설명한다.
  • 메모리 관리 기법인 ARC의 장점과 야기되는 순환 참조 문제를 언급한다.

@Kiyoung-Kim-57
Copy link
Collaborator

Swift는 ARC를 이용해 메모리 관리를 합니다. ARC는 객체의 참조를 자동으로 카운팅하여 이를 토대로 객체의 수명을 관리합니다.
기본적으로 생성된 객체는 참조 카운트 1을 가지고 강한 참조가 생길 때마다 참조 카운트가 증가합니다.
카운트는 강한 참조가 해제될 때마다 감소되고 참조 카운트가 0이 되면 메모리에서 해제됩니다.

ARC 환경에서 두 객체가 서로 강한 참조를 가지게 되면 순환 참조가 발생하고 이는 메모리 누수를 유발합니다.
이 경우 weak과 unowned 키워드를 이용해 순환참조 문제를 해결할 수 있습니다.

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 11, 2025

Swift에서 메모리 관리는 주로 ARC를 통해 자동으로 이루어집니다. ARC는 RC를 통해 자동으로 메모리를 관리해주는 시스템입니다.

ARC는 레퍼런스 타입을 수거할 때 레퍼런스 카운트를 기반으로 수거하는데, 레퍼런스 카운트는 레퍼런스가 생성되거나 참조될 때 1씩 증가하고 참조가 해제될 때 카운트가 감소하여 최종적으로 0이 되면 레퍼런스 타입이 메모리에서 해제됩니다.

최종적으로는 ARC 덕분에 메모리 관리는 자동적으로 되기에 개발자의 입장에서는 RC만 잘 관리해준다면 메모리 누수와 같은 문제를 해결할 수 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants