Objective-C runtime과 compiler에 namespace나 일전에 제시한 메커니즘을 넣는게 어떨지요?

일전에 Mac OS X에서의 보안을 심각하게 훼손할 수있는 문제에 대한 해결법을 제시했었다. 이상한 사람이 말도 안되는 식으로 태클을 걸어서 (더군다나 말도 안통하니) 참 답답했는데, 오늘 같은 문제에 또 봉착을 했다.

일전은 Cocoa에서 기본으로 제공되는 클래스와 그 메시지를 한 plug-in에서 overriding을 했을때, 그게 그 한 plug-in 혹은 모듈에서만 적용되지 않고, 호스트 프로그램의 모든 코드에 공통적으로 적용된다는 심각한 문제를 지적한 것이었다. 요약하자면.
요번은 같은 문제이지만 조금 다른 use case의 것이다.

예를 들어, 한 호스트 프로그램에 로딩이 되는 여러 plug-in 프로젝트를 하고 있다고 하자. 그런데 어떤 클래스는 그 프로젝트들에서 공유를 한다고 하자. 그럼 호스팅 프로그램에 플러그인으로 로딩이 되면, 한 메모리 공간에 복수개의 클래스가 정의되는 것으로 된다. 그때 어떤 것이 실지로 로딩되는지는 정의되지 않았다. Final Cut Pro의 플러그인들을 보면 심지어 Apple에서 나오는 것인데도, 그런 충돌이 있다. 자.. 이제 좀 다른 경우를 보자.
여러 사람이 프로젝트를 하기 때문에, 어떤 시점에서 같은 코드를 공유했다가, 어떤 프로젝트는 신경을 못 쓰면서 그런 공유되는 코드의 업데이트가 어떤 것은 되고 어떤 것은 안되었다고 하자.

그럼 두 문제가 생긴다. 우선 어떤 버젼의 클래스가 로딩이 될까? 아까 말했듯이 정의되지 않았다. 그럼 그 결과를 보장할 수가 없다. 다행스럽게도 다들 정확히 같은 코드면 그래도 문제는 없지만, 여러명이 프로젝트에 동시에 투입되거나, 일하던 사람이 회사를 떠나거나 하면 문제가 안 생길래야 안 생길 수가 없다.

이것을 해결하는 방법으로 Apple이 여기에 써 놓았다.

근데 그건 그다지 좋은 방식이 아니다. 왜냐하면 공유되는 클래스의 이름을 바꾸어야 하기 때문이다.
생각해보자. 같은 코드에서 나왔기 때문에, 그런 것을 묵시적으로 알려주기 위해서 100이면 100 다 그 클래스 이름을 그대로 유지하고자들 할 것이다.

그럼 이것을 해결하려면? 일전에 내가 제시했던 그 방법이나, 아니면 namespace를 이용하면 할 수있다.
왜 Apple이나 GNU의 GCC 팀이 Objective-C에 namespace를 넣지 않는지 이유를 잘 모르겠다?
넣으면 안될 강력한 이유가 있는지는 모르겠다. 내 생각엔 넣어서 얻는 이득이 해악보다 더 많을거 같은데…

UPDATE :

이런.. 일전에 내가 써 놓은 해결 방법이 하나 더 있었네. @compatibility_alias라는 것을 쓰는 방법인데, 해보니까 이상하게 안되었다. Objective-C compiler가 은근히 최근 iOS 4.x SDK가 나온 이래 많이 바뀌었는데, 그 사이에 안되기 시작한 것인지는 모르겠다.

UPDATED :

Hello JongAm,

This is a follow up to Bug ID# 9309924. After further investigation it has been determined that this is a known issue, which is currently being investigated by engineering. This issue has been filed in our bug database under the original Bug ID# 2821039. The original bug number being used to track this duplicate issue can be found in the State column, in this format: Duplicate/OrigBug#.

Thank you for submitting this bug report. We truly appreciate your assistance in helping us discover and isolate bugs.

Best Regards,

Developer Support
Apple Worldwide Developer Relations

4 responses to this post.

  1. Posted by maccrazy on April 19, 2011 at 11:18 PM

    영문판이랑 한글판이랑 첫 문장이 막 다르고.. 못 읽는다고 그러시면 안돼요.. ㅋㅋ 혹시나 읽을 수 있을지도 몰라요.

    Reply

    • Posted by jongampark on April 20, 2011 at 6:44 AM

      으.. 어제 글을 쓰는데, 이상하게 영어건 한글이건 말이 안나오고 정리가 안되더라구요. 그래서 애초에 영어로 이상하게 쓴데다가, 한글로 쓰는데 이상하게 번역투 말이 되고.. 그리고 어차피 영어로 쓴거 보고 한글로 옮기는게 아니고, 그냥 머리에서 나오는대로 쓰다보니.. 근데 의미상으론 다른거 없잖아요. 뭐 꼭 글자가 같아야 하나? 흥! ㅋㅋ

      Reply

      • 영어로 쓰시다가 한글로 다시 쓰시다가 다시 영어로 쓰셨다는 말씀이신가요?
        전 둘중에 하나도 제대로 못하는 사람이라서 어지럽네요… ㅎ

        한글로도 올려주셔서 도움 많이 되어요~~

        Reply

        • Posted by jongampark on April 30, 2011 at 3:52 PM

          최근에는 한글로만 올리려하고 있고 (쓰는 빈도도 줄어들었지만), 아마 당분간 그렇게 나갈 것으로 보입니다.
          아무래도 제가 영어를 못하니까, native들이 볼때, 말이 이상하기도 하고, 때론 기분 나빠하는 것도 같습니다.
          뜻만 알고 말의 맛과 느낌을 모르니까 그렇겠죠.
          우리도 그런거 있잖아요. 미녀들의 수다에 나오는 사람들은 다들 말 잘하지만, 보통 외국인들 한국말하는 것보면, 단어도 문법도 다 맞기는 하는데, 웬지 어색하고 “우리는 저렇게 안쓰는데”하는…
          최근에 NSCoder Night에서 한 건이 있었죠.
          그리고 한국형 표현을 영어로 하다보면 (Konglish) 우리 말로는 아무런 문제가 없는데, 영어로 하면 좀 기분 나쁜 경우도 있구요.

          이방인의 설움이랄까.. 세상 살기에는 네발 달린 동물이 되거나 새가 되거나 하는게 낫지, 박쥐가 되면 양쪽으로부터 오해받고 힘든거 많아요.. T.T

          Reply

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: