Peter Wayner | Australian Reseller News
2014.06.09
아마도 애플은 역사를 통틀어 가장 잘 운영되는 기업 중 하나일 것이다. 아마도 스티브 잡스는 영웅이고, 아이폰과 아이패드는 멋진 기술일 것이다. 그리고 iOS용 앱을 개발하는 일은 벌이가 좋다(앱 스토어 승인을 통과하고, 무수한 앱 더미에서 누군가의 눈에 띄는 행운만 따라준다면). 그러나 컬트라고 할 만한 애플 생태계에 몸담고 있는 일이 늘 좋지만은 않다. 애플 개발 생태계에 속하게 됨으로써 받는 고통은 수없이 많은데, 그 중 하나는 바로 오브젝티브-C로 프로그램해야 한다는 점이다 (스위프트, 빨리 와라!). 오브젝티브-C가 개발자들의 분노를 사는 9가지 이유를 살펴본다. editor@itworld.co.kr
비슷한 듯 다르다
오브젝티브-C의 "C"는 "자바스크립트"의 "자바"와 같은 부적절한 명칭은 아니다. 적어도 오브젝티브-C에는 C아 마찬가지로 포인터와 int, 중괄호가 있다. 그런데 친숙함은 여기서부터 갈라진다.
오브젝티브-C 옹호론자들은 오브젝티브-C가 C의 엄격한 상위 집합임을 강조한다. 즉, C로 할 수 있다면 오브젝티브-C로도 할 수 있다는 것이다. 하지만 그 반대는 성립하지 않는다. 따라서 개발자는 "오브젝티브-C 메쏘드 서술을 써야 하나, 아니면 C를 써야 하나"라는 고민에 빠지게 된다. C 프로그램에 대한 이식성을 확보하려면 끊임없는 경계와 숙고가 필요하다. 게다가 상위 집합이라는 주장에 대해 말하자면 사소한 부분이 맞지 않는다. 예를 들어 접미사를 보자. C 코드는 .c로 끝나는 파일에 저장되는 반면 오브젝티브-C 파일은 .m으로 끝난다. Credit: PrinceSparkle via deviantArt
대부분 옛 C 그대로
객체 지향이라고 하지만 오브젝티브-C에서는 달리 얻을 것은 많지 않다. 오브젝티브-C는 더 좋은 코드를 쓰는 방법이라기보다는 대규모 시스템을 위해 코드를 정리하는 방법에 가깝다. 여전히 개발자가 포인터를 책임져야 하고, 메모리를 추적해야 한다. C 프로그래머는 자신의 소프트웨어를 "이식 가능한 어셈블리 코드"라고 즐겨 칭했는데, 오브젝티브-C의 경우도 마찬가지다. 다만 맥에서 아이패드로만 이식이 가능하다는 것이 함정이다. Credit: Wikipedia
80년대에 머무르다
파라슈트 팬츠, 긴 머리, 영화 "조찬 클럽", 그리고 넥스트(NeXT) 컴퓨터: 오브젝티브-C는 프로그래밍 언어 세계의 타임머신과 같다. 기초 요소는 이른바 1급 시민(first-class citizen)이 아니다. 자바는 아주 오래 전에 가비지 콜렉션(리스프를 존속시킨 훌륭한 아이디어)을 채택했다. 오브젝티브-C는 2006년에 이것을 도입했다. 속성과 클로저도 마찬가지다. 그런데 iOS에는 가비지 콜렉션이 없다. 아이폰이 딸꾹질을 하는 것은 아무도 원하지 않았기 때문이다. 그나마 파스칼이나 아다(Ada)는 아니라는 사실을 위안으로 삼아야 한다. Credit: Wikipedia
구두점
파이썬, 루비, 커피스크립트를 쓰는 똑똑한 요즘 젊은 친구들은 대괄호, 중괄호 따위를 쓰지 않고도 수십억 달러짜리 회사를 일궈낼 수 있다. 오브젝티브-C를 쓰다보면 키보드의 구두점 키들이 닳아 없어질 지경이다. :, @, *? 오브젝티브-C에서 사용하지 않는 문자가 있나? Credit: LovelyGioia via deviantart
구식 구문
90년대에 현대화를 시도했지만 실패했다는 점에서 오브젝티브-C의 구문은 코카콜라와 닮은꼴이다. 애플이 1997년에 도입하려 했던, 깔끔하고 "모던한" 구문은 잊어도 된다. 코카콜라 클래식이 등장했듯이, 우리도 "클래식" 구문으로 되돌아갔다. 시도는 좋았다. 거추장스러운 구두점을 걷어내고, 모든 요소를 더 쉽게 읽고 분석할 수 있도록 했다. 그러나 모두 쓰레기 더미 속으로 사라졌다. 1963년 월드 페어의 아름답고 낙천적인 건물들과 함께. Credit: Mike Licht via Flickr
네임스페이스가 없다
자바에는 있는데 오브젝티브-C에는 없다. 다만 이름 앞에 접두사를 붙여서 직접 만들 수는 있다. 잘 되는데, 다만 "NS" 접두사를 쓰면 안 된다. NS는 애플의 네임스페이스다. 끈질기게 생명력을 유지하는 넥스트 스텝(NeXTstep)의 일부분이다.
오직 애플의 우주에서만 돌아간다
포르쉐가 아무리 좋다 해도 오로지 그것만 운전해야 한다면 이야기기는 달라진다. 다양성은 삶의 양념이다. 게다가 이 세계가 모두 아이폰으로 이루어진 것도 아니다. 윈도우 또는 리눅스 업체에 취업한다면 지금까지 배운 오브젝트-C의 모든 부가적인 확장 기능들을 잊어도 된다. 아무런 쓸모도 없기 때문이다.
이식성은 중요하다. 애플 제품이 대단히 뛰어나다는 사실은 애플(그리고 아이폰 사용자들)에게 행운이다. 소비자가 선택할 수 있는 수없이 많은 기기들을 대상으로 작업 효율성을 최대화할 방법을 찾는 개발자 입장에서 결코 달가운 일이 아님에도 코드를 오브젝티브-C로 다시 쓰도록 유인하는 강력한 당근이기 때문이다.
참고로 gcc, 시그윈(Cygwin), GNUStep을 잘 활용하면 오브젝티브-C를 다른 곳에도 사용할 수 있다. 본인이 강심장이라고 생각한다면 시도해 보라. Credit: Wikimedia
엑스코드가 유일한 선택안
마오쩌둥의 중국, 헨리 포드의 모델 T와 정확히 같은 경우라고 할 수는 없겠지만, 아무튼 오브젝티브-C 세계에서는 선택할 수 있는 것은 하나뿐이다. 다를 필요가 없지 않은가, 동무?
공정함을 위해 말하자면 몇 가지 오픈소스 스택이 있다. 그러나 엑스코드처럼 자주 쓰게 되지는 않는다.
애플의 "자애로운 독재"
제품에 대한 훌륭한 비전을 가진 자애로운 독재자에게는 좋은 점도 분명 있다. 결국 이 독재자가 만든 제품이 다른 대부분의 제품에 비해 더 우아하고 멋지다. 그러나 애플은 여전히 모두의 삶을 불편하게 만드는 거대한 장애물이다.
내가 만든 아이폰 앱 사본을 100개 이상 배포하고 싶다고? 포기하라. UI를 "다르게" 만들고 싶다고? 사용자 인터페이스 지침서를 다시 읽어보기 바란다. 애플은 강력한 암호화를 사용해서 죄다 단단히 잠가두고, 광적인 독재적 정책으로 그 나머지도 꽁꽁 묶어두기 때문에 애플의 허락 없이는 거의 아무것도 할 수 없다. Credit: Wikimedia