상세 컨텐츠

본문 제목

[Objective-C] 가비지 컬섹션(Garbage Collection)

헉!!/Objective C

by 권태성 2012. 1. 3. 19:25

본문


가비지 컬렉션에 대해서
──────────────────
프로그램을 실행할 때 종종 문제가 되는 것은 메모리상에 확보한 영역을 언제 해제하느냐입니다. Objective-C와 같은 객체지향 언어에서는 오브젝트를 생성하면 메모리상에 그 영역이 만들어집니다. 오브젝트를 계속해서 생성하다보면, 사용할 수 있는 메모리 영역은 그만큼 줄어들게 됩니다. 그렇기 때문에 필요가 없어진 오브젝트는 프로그래머가 적절하게 해제해서 메모리를 확보해 주어야 합니다. 그렇지 않으면 자림나 차지하고 사용되지 않는 메모리 영역이 계속 증가하게 됩니다. 이런 현상을 메모리 누수(memory leak)라고 합니다. 그래서 고안해 낸 것이 가비지 컬렉션(garbage collection)이라는 기능입니다. 말 그대로 쓰레기를 수집하듯, 불필요한 영역을 자동으로 해제시켜주는 시스템입니다.

가비지 컬렉션 켜기
이 편리한 가비지 컬렉션 기능은 Java&Ruby, Python 등 현대적인 객체지향 프로그래밍 언어에 기본적으로 갖추어져 있습니다.
Objective-C에는 원래 가비지 컬렉션 기능이 없었지만, Mac OS X 10.5부터 지원되기 시작한 Objective-C 2.0 이후에는 사용할 수 있게 되었습니다. 기본값은 가비지 컬렉션 기능이 꺼져 있으며, 프로젝트 단위로 설정합니다.

Xcode에서 다음과 같이 설정하면 됩니다.
1. Project - Edit Project Settings
2. Project "~" Info 대화상자에서 Build 패널을 표시하고 GCC 4.2 - Code Generation의
  Objective-C Garbage Collection에서 Requeired [-fobjc-gc-only] 를 선택합니다.

+ Supported [-fobjc-gic]를 선택하면 가비지 컬렉션과 사용자에 의한 메모리 관리가 공존할 수 있습니다.


그렇다면 메모리 관리는 필수적일까
프로그램 내에서 확보한 메모리 영역은 그 프로그램이 종료되면 해제되는데, 짧은 커맨드 라인 툴인 경우에는 메모리 관리에 대해 그렇게 신경 쓸 필요가 없을지도 모르지만 데스크톱에 상주하는 GUI 애플리케이션이나 본격적인 대규모 프로그램을 만들 때는 항상 신경을 써야합니다.

하지만 가비지 컬렉션을 사용하면 프로그래머가 직접 메모리를 해제하는 방식에 비해 속도 면에서 불리합니다. 또한 현시점에서 아직은 iPhone용 프로그램 개발에 가비지 컬렉션을 사용할 수 없습니다. 그러므로 Objective-C에 어느 정도 익숙해지면, 가비지 컬렉션을 사용하지 않고 직접 메모리를 관리하는 것도 좋을 것입니다.






관련글 더보기