Xcode 4와 동시에 등장한 ARC(Automatic Reference Counting) 덕분에, iOS 개발자들은 레퍼런스 카운트 관리에서 해방될 수 있었습니다. 그렇다면 ARC는 어떻게 동작하기에 개발자들의 수고를 덜어주고 있을까요?

이번 글에서는 ARC가 어떤 역할을 하며, 어떻게 동작하는지 알아보려 합니다.

이전에 작성했던 레퍼런스 카운팅과 MRR에 대한 글을 읽고 나면, 이 글을 이해하는데 도움이 됩니다.

ARC (Automatic Reference Counting) ?

ARC는 단어의 뜻 그대로 레퍼런스 카운트를 자동으로 관리하는 것을 의미합니다.

image1

위 그림은 ARC를 사용했을 때 개발자의 생산성이 좋아지는 것을 보여주고 있습니다. 왜냐하면 retain과 release 코드를 작성할 필요가 없어졌기 때문입니다. 🤩

우리는 이제 Release/Retain으로 메모리 관리를 할 시간에 더 멋진 UI/UX를 만들거나, 리펙토링을 거쳐 아름다운 코드를 만들 수 있겠죠?

ARC는 어떻게 동작하나요?

ARC works by adding code at compile time to ensure that objects live as long as necessary, but no longer.

Apple의 설명에 따르면 ARC는 컴파일 타임에 적절한 코드를 추가하는 역할을 합니다. 즉, 컴파일 타임에 레퍼런스 카운트 관리에 필요한 코드를 적절한 위치에 추가해주는 것이죠!

MRR에서 사용했던 프로젝트에 ARC를 적용한 샘플 코드를 통해 동작을 알아보겠습니다.

프로젝트에 ARC를 적용하게 되면, 프로그래머는 메모리 관리를 위한 함수를 직접 호출할 수 없게 됩니다.

대표적으로 retain과 release 함수가 있습니다. 해당 함수를 사용하게 되면, Xcode에서 실시간으로 오류가 발생하게 됩니다.

위 코드를 실행하면 아래와 같은 로그가 출력됩니다.

2019-11-05 00:56:17.279733+0900 ObjectiveC Example[87101:8338669] MyClass alloced! 2019-11-05 00:56:17.279909+0900 ObjectiveC Example[87101:8338669] MyClass Released!

Release 함수를 호출하지 않았는데도 MyClass 객체가 메모리에서 해제되는 것을 볼 수 있습니다.

결론

ARC는 개발자에게 생산성과 편의성을 가져다 주었습니다. 그렇다면 우리는 더이상 메모리에 대해 신경 쓸 필요가 없어진걸까요 ? 대답은 ‘아니오’ 입니다.

ARC 덕분에 우리는 메모리 관리에 대해 조금 ‘덜’ 고민하게 되었고 코드의 양도 많이 줄었지만, 여전히 메모리 관리에 신경써야합니다.

참고자료