Mar 14

코코아 프로그래밍 3판 번역서의 오타 페이지가 업데이트 되었습니다. _ _*
상단의 Cocoa Programming 정오표에서 전체 리스트를 보실 수 있습니다.

2판때보다도 더 많은 검사를 했음에도 완전히 잡히지가 않았는데,
오탈자 신고해주신 분들께 감사의 말을 전합니다. 꾸벅 _ _*

즐거운 코코아 코딩 하세요~ :D

p.s. 가장 많은 오타를 찾아준 Prin_E 님께 감사드립니다. _ _* 꾸벅…

Feb 09

4일 전에 코코아 프로그래밍 3판에 관한 질문 중 다음과 같은 질문을 받았습니다.

“번역판 62쪽 다섯 번째 줄에 “또한 어떤 초기화 메서드들은 리시버가 아닌 객체를 리턴하기도 한다” 라는 문장이 있습니다. 원서와 대조해보니 원서(56쪽)에는 없는 문장이더군요. 이것은 역자 주인가요? 그리고 그 의미는 [Foo init] 을 했을 때 Foo가 아닌 다른 클래스, Bar의 인스턴스가 리턴되는 경우도 있다는 의미인가요?” - W님

2판에 있던 내용을 원 저자가 3판에선 빼버린 내용인데, 왜 뺐는지 모르겠습니다. 저의 실수로 3판 원서와 완전히 동일하게 번역이 안되서 2판 내용을 재활용(…)하던 과정에서 첨가된 내용인데, 틀린 말은 아닙니다. 맞는 말입니다.

W님이 질문하신대로 [Foo init] 을 했을때 Foo 가 아닌 다른 클래스, Bar 의 인스턴스가 리턴되는 경우도 있다라는게 조금 다르긴한데, 거의 맞게 생각하신 겁니다. 이해하기 편하게 조금 더 용어들을 명확하게 할게요. Foo 라는 클래스가 있습니다. 그래서

foo = [[Foo alloc] init];

와 같이 foo 라는 인스턴스를 새로 생성합니다. 앞에서 [Foo alloc] 을 하게되면 Foo 란 클래스의 인스턴스가 하나 생겨납니다. 여기까진 Foo 클래스의 인스턴스임이 확실합니다. alloc 메시지가 하는 일은 메모리에서 할당을 하고, 모든 인스턴스 변수들을 초기화(0이나 0.0, NULL, 혹은 nil 등으로..)하고 isa 인스턴스 변수를 alloc 한 클래스를 가리키도록 초기화합니다. 그런데 이렇게해서 얻어진 인스턴스에 init 메시지를 보낼 경우에 init 메시지를 받은 리시버, 즉 alloc 으로 할당된 녀석이 리턴될 수도 있지만 alloc 으로 할당된 녀석이 아닌, 다른 녀석이 리턴될 수도 있다는 얘기입니다. 진하게 표시한 부분이 질문에 대한 답이 되겠지요?

다음의 코드를 살펴볼게요.

- (id)initWithAccountID:(NSString *)identifier {
    if ( self = [super init] ) {
        Account *ac = [accountDictionary objectForKey:identifier];
        if (ac) { // object with that ID already exists
            [self release];
            return [ac retain];
        }
        if (identifier) {
            accountID = [identifier copy]; // accountID is instance variable
            [accountDictionary setObject:self forKey:identifier];
            return self;
        } else {
            [self release];
            return nil;
        }
    } else
        return nil;
}

애플의 문서에서 가져온 코드인데.. 위와 같은 초기화 메서드를 작성했을 경우, 분명 init 메시지는 alloc 으로 할당한 녀석, 즉 리시버에게 보냈지만 리턴되는 객체는 리시버가 아닌, 기존에 다른 곳에서 할당했던 객체가 리턴되겠지요?

이 정도면 답변이 되었을까요? 음. 역주를 달았어야 했는데, 조금 아쉽네요.
이 애플 문서를 참고하시면 더 많은 도움이 되리라 봅니다. (영어 울렁증 있으신 분들은 패스!!)

p.s. 댓글로 무명(guest)님이 글을 달아주셨는데, 댓글로 다시 답글을 달긴 했지만 오해의 소지가 있어서 글에 덧붙입니다. Foo 란 클래스에 init 요청을 했는데 Bar 의 인스턴스를 리턴해버리면 안되겠지요. 당연한 얘기라 따로 언급을 안했는데 오해하신 분이 있네요. 제가 쓴 글의 요지는 “리시버가 아닌 다른 객체가 리턴될 수 있다”를 말한거구요. 물론 다른 객체라는 것도 Foo 클래스의 다른 객체이지, 전혀 새로운 Bar를 리턴하는건 아닙니다. 질문하신 분도 그 점은 알고 계셔서 뭔가 이상하다 생각하셔서 질문하신거고, 그런 상황이 아님을 알려드린 겁니다~ 오해하지 마세요 :)

Dec 15

안녕하세요. Jenix입니다. 정말 오랜만에 포스팅을 하네요.
그간 너무너무너무 ㅠ.ㅠ 바쁘다는 핑계로, 블로그도 잘 쳐다보지 못했는데,
하나 알려드릴 내용이 있어서 이렇게 … :)

드디어 코코아 프로그래밍 3판이 나왔습니다. 2판을 구매했던 분들에게 금전적인 부담을 덜어드리고자 여러 방향으로 3판에 대해 고민을 했었는데, 바뀐 부분이 너무나 많아, 바뀐 부분만 추려낸 업데이트 서적(?) 형식은 불가능했었습니다. ㅠ.ㅠ

3판의 경우 2판에서 가장 큰 문제였던 오탈자 및 오역을 잡아내는데 엄청난 노력을 기울였습니다. 보고 또 보고, 보고 또 보고,… 지금까지 저에게 개인적으로 이메일이나 OSXDev 등을 통하여 여러 분들이 알려 주셨던 오탈자 및 오역들을 전부다 수정하여 반영 하였습니다. 이번엔 기대하셔도 좋습니다 ^^; 근 3주간은 잠을 제대로 못잔거 같네요. 회사 일에, 번역 일에, 기타 등등등..=_=

2판을 구매하신 분들은 너무 서운해하지 않으셨으면 좋겠습니다.^^; 옛 Mac OS X을 지원해야하는 일이 있을 경우엔 많은 도움이 되리라 생각이 됩니다. 그 외에도 이전에 코코아가 어떻게 변해왔는지도 알 수 있을테고.. 사실 애플 의도대로 따라가면 이전 OS를 지원할 일이 거의 없긴하지만, 막상 실제 프로젝트를 진행할땐 그게 또 안그렇거든요^^ 여전히 Tiger를 지원해야하는 경우도 많구요. 이럴땐! 2판을 꺼내들고 참고하시면 되겠습니다. 흐흐;

가격은 어떻게 책정되었는지 아직 저도 잘 모르겠습니다. 조만간 각 인터넷 서점에 등록될거 같아요. 크리스마스 이전에 받아볼 수 있다고 하였으니 이제 한 10일정도 남은거네요. 올해 크리스마스는 집에서 코코아와 함께!! -ㅇ-;;

올해가 가고, 일들이 좀 정리되면, 매번 하는 말인, 블로깅좀 열심히 해야겠습니다. 으휴.