BLOG main image
분류 전체보기 (92)
Cocoa Touch (11)
Cocoa (10)
Objective-C (13)
Swift (6)
Development (11)
Tools (11)
Books (7)
etc (21)
Application release (1)
Document Project (1)
105,799 Visitors up to today!
Today 2 hit, Yesterday 2 hit
daisy rss
tistory 티스토리 가입하기!
2013. 6. 19. 23:20

ARC(Automatic Reference Counting)이 소개된지도 시간이 꽤 지난 것 같은데 나는 여전히 이놈이 적응되지 않는다. 아니 적응하고 싶지 않다가 정확한 표현인지도 모르겠다.

Objective-C의 retain/release 룰은 매우 심플하고 간단한데 왜 굳이 그것을 복잡한 룰로 한꺼풀 더 씌워서 ARC라는 놈을 만들었는지 모르겠다.

아직도 많은, 특히나 오래된 Objective-C 개발자들은 ARC를 그다지 선호하지 않는 편으로 판단된다. 애플은 열심히 밀고 있지만...


그러면 애플은 왜 ARC를 이렇게까지 밀고 있을까? 대충 우스개로 짐작해보면 다음과 같은 이유가 있을 수 있겠다.


1. Clang으로 뭔가를 계속 개선하고 있다는 것을 보여주고 싶다.

2. C를 제대로 모르는 상태에서 Objective-C를 개발하기 시작하는 개발자들이 alloc/free에 대한 개념이 없다. 그래서 수많은 leak과 double free를 만들어내고 앱의 퀄리티를 낮추기 때문에 그들을 일일이 교육시키느니 그냥 툴로 커버하는게 낫다고 판단했다.


정말 그럴지도 모르겠다는 생각이 든다. 옆에서 지켜보던 모 프로젝트는 Objective-C 초보가 코드를 작성해서 도저히 벗어날 수 없는 메모리 문제에 봉착했었다. (leak, double free, retain cycle...) 하지만 그 모든 문제를 ARC가 한방에 해결해줬다. 그래 적어도 앱이 죽지는 않았다.

개발을 하면서 자신이 사용하고 있는 언어의 정확한 동작원리도 이해하지 않고 사용하겠다는건 도대체 무슨 용기인지 모르겠다.


어쨌건, 애플이 ARC를 홍보할 때 사용하는 수많은 말들이 있지만 사실 별로 와닫지 않고 단순한 언어와 룰을 복잡하게만 만들었다는 생각이 드는건 나의 편협한 생각탓일지도 모른다. 하지만 어쩌겠나... 그나마 유일하게 쓸만하다고 느끼는 경우는 부주의한 코드 작성으로 retain cycle이 걸릴 확률이 조금 줄어든다는 정도인데...

대신 alloc / free 시점의 정확한 컨트롤, 메모리 사용에 대한 명쾌함이 사라진다고 생각하면 "글쎄요?"이다. 공짜로 그게 다 주어진다고 해도 더 낫다고 확신이 서지 않는데... 뭐 또 봐야 할 건 이렇게도 많고 기존 코드와 호환도 안되고... 에라잇!


최건우 | 2013.06.21 01:19 | PERMALINK | EDIT/DEL | REPLY
Objective-C를 꽤 오래 해온 개발자입니다. 저는 ARC가 나온 이후로 ARC를 이용하지 않는 프로젝트는 손도대지 않고있습니다. 왜 그 편하고 최적화도 공짜로 해주며 개발자가 실수할 염려도 줄여주는 도구를 안쓰는지 이해가 되지 않는다고 생각하는데 이에 대해서는 어떻게 생각하시나요
maccrazy | 2013.06.21 11:21 신고 | PERMALINK | EDIT/DEL
안녕하세요. 댓글을 남겨주셔서 감사합니다.
뭐, ARC를 바라보는 시각의 차이야 개발자 마다 있는 것은 당연한데요, 제 경우는 오히려 불편했다는 말씀을 드리는 것입니다.

1. 편리함 : 메모리 관리에 대해서 투명하게 확인이 되지 않는게 전 오히려 더 불편했습니다. 마치 Java를 볼때의 그런 불편함이랄까요? 가베지 콜랙팅이 언제 일어날지 확인도 안될때의 그런 느낌 말입니다. 단지 retain/release pair를 맞추는 수준의 생각을 덜어줄 수 있는건 편하다고 느껴지지는 않았습니다.

2. 최적화 : 몇몇 부분에서 ARC가 최적화를 해주는게 맞기는 하지만, 대부분의 정말 최적화가 필요한 부분은 결국 사람이 일일이 확인해봐야 합니다. 즉, ARC가 해주는 최적화가 크게 와닫지 않습니다.

3. 실수에 대한 우려 : 실수는 ARC를 쓰나 안쓰나 동일하게 발생하고요, 실수를 줄이기 위해서는 unit test나 analysis, profiling같은 유용한 방법이 많습니다. 아, 메모리에 관한 실수라면 그건 실수가 아니라 잘 모르고 있는 것일 확률이 훨씬 높다고 생각됩니다.

본문에서도 썼듯이, ARC 자체가 나쁘다고 생각하지는 않습니다. 다만 ARC가 추가되면서 언어 자체의 룰이 오히려 더 복잡해졌고요, ARC를 쓰더라도 결국 ARC가 어떻게 동작하는지 제대로 알지 못하면 전혀 종잡을 수 없는 실수를 만들 수도 있다고 생각합니다. 즉, retain/release 개념만 알면 될 것을 ARC까지 알아야 하는 상황이 된거고요. 뭐, 애플은 그냥 믿고 ARC를 써라고하는데... :)

사실 그것보다 더 중요한 문제는, 개발자들이 원리를 이해하고 공부하는 습관을 가지지 않고 가시적인 편리함, 성과에만 치중하게 되는 경향을 가지게 만든다는거죠. 메모리 관리에 무엇인가 문제가 생겼다면 왜 그런 일이 벌어졌는지 확인해보지 않고 툴이 알아서 모든 뒷정리를 해줄거라 믿고 그냥 날림 코딩을 하게 되는거죠.

저도 Objective-C를 지금 10년 넘게 주 언어로 사용하고 있고 제 주변에 그런 분이 몇분 계신데 하나같이 하시는 말씀들이 "ARC 좋은건 알겠는데 나한테는 별로 유용하지 않다."입니다. 왜 그런걸까요? :)
박종암 | 2013.06.21 14:42 | PERMALINK | EDIT/DEL | REPLY
웬지 Like 버튼이나 Favorite 버튼이 아쉬워지는군요. :)
maccrazy | 2013.06.21 14:55 신고 | PERMALINK | EDIT/DEL
그래도 언젠가는 ARC로 넘어가야 하나 그러고 있습니다. 마음에 들지는 않지만 뭐 어쩌겠습니까? (그래도 최대한 버틸때까지 버텨볼렵니다. ;) )
박종암 | 2013.11.01 17:19 | PERMALINK | EDIT/DEL | REPLY
누가 잘 정리했군요. ARC가 어떤 점이 안 좋은지.
http://pivotallabs.com/why-not-to-use-arc/
maccrazy | 2013.11.02 01:00 신고 | PERMALINK | EDIT/DEL
와닫는 문장이... 쉬운건 더 쉽게 어려운건 더 어렵게.. ㅋㅋ
요즘 프로젝트 하나를 시험삼아 ARC로 해보고 있는데... 글쎄요... 별로 좋을게 없다는 생각을 더욱 굳히게 만들고 있네요.
Name
Password
Homepage
Secret