BLOG main image
분류 전체보기 (51)
Cocoa Touch (11)
Cocoa (4)
Objective-C (10)
Development (4)
Tools (1)
Books (4)
etc (14)
Application release (2)
Document Project (1)
MakeItBlue의 생각
tuna's me2DAY
위피 내년 4월부터 의무화 폐지..
맥, 기술, 영화, 도서 그리고 삶
[News] iPhone OS 2.2 출시?
maccrazy's blog
Self Encapsulate Field
maccrazy's blog
iPhone NSLog관련 애플 문서
maccrazy's blog
8,846 Visitors up to today!
Today 2 hit, Yesterday 7 hit
daisy rss
tistory 티스토리 가입하기!
2009/06/09 19:02
This function is equivalent to CFRelease, except that it does not cause an error if the path parameter is NULL.


이 뭥미?
꼭 이렇게 만들어야 했을까? 뭔가 가슴아픈 사연이 있었던 걸까?
저작자 표시 비영리 변경 금지
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://maccrazy.tistory.com/trackback/61 관련글 쓰기
assam258 | 2009/06/09 21:42 | PERMALINK | EDIT/DEL | REPLY
이 뭥미?
꼭 이 글을 써야만 했을까? 뭔가 가슴아픈 사연이 있었던 걸까?

copy & paste 가 필요한 시점. 이제 얼마 남지 않았다.
maccrazy | 2009/06/10 11:21 | PERMALINK | EDIT/DEL
어디까지나 제가 까먹지 않기 위한 포스팅입니다. :)
요즘은 살짝 치매끼가 있는지 자꾸 까먹어서요. ㅎㅎ
Name
Password
Homepage
Secret
2009/04/06 23:43
[etc]

요즘 짬내서 읽고 있는 책은 Dreaming in code입니다. 몇몇 반가운 이름들이 거론되곤 하는데 Objective-C를 쓰는 사람이라면 누구나 알법한 브래드 콕스에 대한 이야기가 있기에 소개합니다.

브래드 콕스의 생각을 읽으면 Objective-C의 설계 철학을 조금이라도 더 이해 할 수 있지 않을까요?


인용시작 :

1980년대에 브래드 콕스라는 컴퓨터 공학자는 재사용 가능한 파트를 결합해서 프로그램을 개발하기 위해 엄청난 노력을 쏟아부었다. 그는 C언어를 확장해서 Objective-C라는 새로운 언어를 고안했으며, 이를 통해 재사용 가능한 소프트웨어 객체를 개발하는 것을 좀더 편리하게 만들고자 했다. 하지만 이 시도가 무위에 그치자, 그는 이 문제를 기술적인 관점 대신 경제적인 관점에서 접근하기 시작했다. 1990년에 콕스는 프로그래머들이 재사용가능한 작은 컴포넌트를 개발해 다른 개발자들에게 판매할 수 있게 하는 새로운 접근 방식을 고안해냈다.

콕스에 따르면 프로그래머들은 여전히 움막을 짓는 방식으로 소프트웨어를 개발하고 있었다. 그는 '혼자서 공예품을 만드는 가내수공업 방식'에서 벗어나 '제조업 공장을 세우는 기업형 방식'을 추구해야 한다고 주장했다. 오늘날의 소프트웨어 개발자는 볼트와 너트 하나하나를 깎아 총을 만드는 식민지 시대의 대장장이와 비슷하다. 소프트웨어 산업은 '대장장이가 쇳대를 깎듯이 소프트웨어 컴포넌트 하나하나를 수작업으로 깎아내는 단계'에서 산업 혁명과 같은 과정을 거쳐 '안정적이고 신뢰할 수 있으며 명세가 정확한 표준 부품을 시장으로부터 공급받을 수 있는 단계'로 도약하지 못했다. 컴퓨터 하드웨어 산업은 관련 기술의 엄청난 복잡성에도 불구하고 소프트웨어 산업이 흉내 내지 못하는 성공적인 도약을 이뤄냈다. 십자드라이버만 사용할 줄 안다면, 컴퓨터 하드웨어에 대한 전문 지식 없이도 그래픽 카드 정도는 누구나 바꿔 낄 수 있다. 이와 비슷하게 그래픽 카드 제조사들 역시 카드에 들어가는 칩 등의 부품을 시장에서 구입해서 실제로 그런 칩들이 어떻게 동작하는지를 모르고도 얼마든지 그래픽 카드를 만들어낸다. 소프트웨어 또한 이렇게 만들어낼 수는 없을까?

콕스는 이를 시도했다. 그는 스탭스톤이란 회사를 설립해 C언어를 위한 소프트웨어 컴포넌트를 제공하고자 했다. 하지만 일부 작은 성과에도 불구하고, 이러한 접근 방법은 결국 성공하지 못했다. 그는 나중에 다음과 같이 썼다. "실제로 시도해본 결과, 쓸모있고, 재사용에 성공적이며, 프로그래머들이 쉽게 이해해 활용할 수 있고, 지속적으로 쏟아져 나오는 하드웨어 플랫폼에 쉽게 이식되며, 기능 업데이트가 기존 코드와 충돌이 나지 않은 컴포넌트를 개발해서, 모든 것을 자체적으로 개발하려는 문화를 가진 시장에서 판매하는 것은 불가능할 정도로 어려운 일이었다."

인터넷의 등장은 콕스로 하여금 이 문제에 다시 한번 도전하게 만들었다. 콕스는 1995년 자신의 저서인 'Superdistribution'에서 인터넷을 이용해 새로운 소프트웨어 컴포넌트 시장을 구축하는 계획을 제안했다. 그는 오늘날의 컴퓨터 환경에서 코드가 복사되는 것을 추적하는 일은 불가능에 가깝지만, 그 코드가 실제로 실행되는지를 추적하는 일은 충분히 가능하다고 지적했다. 따라서 소프트웨어는 무료로 배포하되, 사용 횟수와 시간에 따라 과금을 하는 방법이 어떻겠냐고 콕스는 제안했다. 새로운 이메일 프로그램을 개발하는 프로그래머라고 가정해보자. 나는 개발 과정에서 다른 프로그래머가 개발한 스팸 필터 모듈을 찾아내서 사용하기로 결정한다. 사용자는 소프트웨어를 무료로 다운로드 받을 수 있지만, 매달 사용료를 지불해야 한다. 사용료의 일부는 스팸 필터를 개발한 프로그래머에게 지급된다.

콕스는 이런 소프트웨어 배포 방식을 통해 신뢰할 수 있는 소프트웨어 컴포넌트들이 거래될 수 있는 시장을 만들어낼 수 있다고 생각했다. 하지만 그의 아이디어는 이번에도 성공하지 못했다. 오늘날의 웹 기반 소프트웨어 서비스는 사용자가 소프트웨어를 다운로드 받아 설치해 사용하는 방식이 아니라 웹 브라우저를 통해 제공돼 무료로 또는 싼 값에 사용하는 모델을 따르고 있다. 이러한 방식이 콕스가 상상했던 '슈퍼배포' 방식과 비용 과금 등에 있어 가장 비슷한 모델이다. 또한 프로그래머들은 비용을 지불해야 하는 소프트웨어 컴포넌트를 사용하는 대신 완전히 무료로 개방된 오픈소스 소프트웨어 컴포넌트를 사용하는 쪽을 선호하게 됐다. 현재 버지니아 주에서 컨설턴트로 활동하고 있는 콕스는 자신도 매일같이 오픈소스 소프트웨어를 사용하고 있고 스스로를 리눅스 해커라고 여기지만, 오픈소스가 소프트웨어 재사용성 문제에 대한 현실적인 해답은 아니라고 말한다. "오픈소스는 돈보다 명성으로 인해 동기부여를 받는 이들에게는 하나의 경제모델을 제시하고 있습니다. 하지만 대부분의 사람들은 어떻게 대출금을 갚을 것인지에 더 동기부여가 되기 마련이죠. 저는 재사용성 문제를 해결하기 위해 이들 다수를 움직이는데 관심이 더 많습니다."

인용 끝:


일단, 제 경우는 이 글을 읽었을 때 딱 와닫는 단어가 두개 있었습니다. "재사용성", "현실적인"이 그것인데요, 이것이야 말로 Objective-C를 잘 설명하는 단어인듯 합니다. 브래드 콕스가 이상을 추구한다기 보다 상당히 현실적인 사고방식을 가졌기에 지금의 Objective-C같은 모양이 나오지 않았나 합니다. 만일 이상주의자였다면 Smalltalk같은 녀석이 나왔을지도 모르겠습니다.



이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback Address :: http://maccrazy.tistory.com/trackback/57 관련글 쓰기
Name
Password
Homepage
Secret
2009/04/06 00:41

"하지만 이 말이 C++에서의 클래스 변수가 없다는 말은 아닙니다. 단지 instance 변수를 선언하는 것과 대응해서 클래스 변수를 정의하기에 필요한 특별한 type specifier가 없다는 것입니다. C++에서 클래스 변수를 선언할 때, static으로 선언하는 것과 마찬가지로 Objective-C 에서도 static이라고 정의하면 그것이 결국 클래스 변수가 되게 됩니다. 


@interface myClass

{

static int example_class_variable;

int name;


}


이렇게 static 타입으로 정의를 하게 되면 그 변수는 해당 클래스 내로 scope가 제한되며, 그 클래스 내에만 존재한다는 것이 됩니다. 이 static 변수는 상속되지 않습니다. 그러므로 모든 인스턴스 객체들은 이 변수의 내용을 공유하게 됩니다. 이런 클래스 변수를 사용하는 용례로는, 만들어지는 인스턴스들의 갯수가 몇개인지등을 기록해 놓는다거나 하는 것이 있겠습니다. 만약 해당 클래스의 객체를 꼭 한개만 만들어야 한다라는 경우에는 그 객체의 모든 상태 정보를 이 클래스 변수들에 넣고, 클래스 메소드만을 이용해서 객체를 만들면 되겠습니다."


이 부분 전체가 오류입니다. Objective-C는 Class variable을 지원하지 않습니다. 애플의 Objective-C 이외 다른 Objective-C에서도 된다는 이야기를 들은적은 없는것 같습니다. 혹시 들어보신 분은 제보 부탁드립니다.

Trackback Address :: http://maccrazy.tistory.com/trackback/56 관련글 쓰기
박종암 | 2009/04/07 01:55 | PERMALINK | EDIT/DEL | REPLY
음... 어제 이야기했던 것처럼 예가 잘못되었군요. static variable을 선언하는 것은 클래스 정의 바깥에서 하면 되겠습니다. 안에서 하면 클래스 변수로서의 역할을 할 수가 없습니다.

혹시나 이 블로그를 읽으시는 분들을 위해서 밝히고 싶은 것은, 제가 말하고 싶었던 것은 의미적 class variable입니다. 문법적 class variable은 Obj-C엔 없는게 맞습니다만, 그렇다고 해서, class variable과 같은 효과를 얻을 수 없는게 아닌데, 그런 측면에서 의미적 class variable을 언급한 것입니다.

혹시나 Obj-C를 입문하시면서 궁금한 것이 있는 분들은 http://burks.bton.ac.uk/burks/language/objc/dekorte/0_old/intro.htm 그리고 http://www.otierney.net/objective-c.html 를 참고 하시면 괜찮을 것으로 보입니다.
maccrazy | 2009/04/07 07:46 | PERMALINK | EDIT/DEL
빨리 2판 작업을... :)
박종암 | 2009/05/04 06:57 | PERMALINK | EDIT/DEL
burks 사이트에는 class variable의 용도로 static 변수를 implementation 파일에서, otierney 사이트에서는 header file에서 해 주었는데, 제 블로그에서 언급했듯이, implementation에서 해 주는 것이 더 좋다고 생각합니다.
#import가 자동으로 중복 선언을 막아주기는 하지만, 변수의 선언은 implementation에서 하는 것이.. 코딩 컨벤션에서도 그렇고 더 낫죠..
| 2009/05/04 06:38 | PERMALINK | EDIT/DEL | REPLY
비밀댓글 입니다
Name
Password
Homepage
Secret
prev"" #1 #2 #3 #4 #5 ... #17 next