그동안 몰랐던 오브젝티브-C 2.0의 깊숙한 곳으로

By | 2014년 4월 16일

오브젝티브-C는 긴 무명 시절을 보내다 아이폰이 등장하면서 주목을 받은 언어입니다. 오브젝티브-C를 처음 대한 개발자라면 대부분 혼란을 겪습니다. C를 바탕으로 한 언어라는데 스몰토크처럼 대괄호([])와 장황한 메서드 이름이 난무하고, 객체 지향 언어라고 하는데 C++나 자바와 비교하면 이질감이 느껴지고, 컴파일 방식 언어인데 런타임에서 동적으로 많은 일을 처리하니 도대체 종잡을 수 없는 물건입니다. 그나마 넥스트스텝 운영 체제 시절부터 20년 넘게 개량되어 온 프레임워크와 개발 도구 덕에 처음 한동안은 개발이 쉬운 것 같지만 얼마 지나지 않아 이런저런 난관을 겪기도 합니다.

이러한 사단은 오브젝티브-C, 그리고 이 언어와 엮인 여러 프레임워크에 다양한 기술적 유전자가 뒤섞인 데서 비롯됩니다. 결국 앞서 잠시 언급한 기술적 배경을 잘 이해하고 그것들이 맥 OS, iOS에서 어떻게 구성되어 있는지 파악해 자신의 상황에 맞게 잘 적용해 사용하는 것이 중요합니다. 『이펙티브 오브젝티브-C 2.0』은 이러한 오브젝티브-C의 깊숙한 언어적 특징을 설명하고 그것을 모범적으로 활용하는 방법을 소개한 책입니다.

『이펙티브 오브젝티브-C 2.0』은 52개 항목으로 구성되어 있고 각 항목은 여타 언어에 없는 오브젝티브-C만의 특징, 활용 모범 사례, 팁, 예제 코드를 제시합니다. 또 잘 알려지지 않은 코드 동작이나 성능에 영향을 미칠 수 있는 요소, 위험한 부분, 복잡성을 드러내어 개발 시 실수를 피할 수 있도록 안내하고 있습니다. 그 외에도 GCD(Grand Central Dispatch), ARC(Automatic Reference Counting) 등 비교적 최근에 도입된 기술들도 소개하고 있습니다.

그동안 오리무중 오브젝티브-C에 어려움을 느낀 개발자들이 오브젝티브-C 숙련자로 나아갈 수 있는 실마리가 되기를 기대합니다. 다음 서점에서 구입할 수 있습니다.

YES24 | 교보문고 | 인터파크 | 알라딘

업데이트 1: PDF 판으로도 구입하실 수 있습니다.

함께 보면 좋을 책

8 thoughts on “그동안 몰랐던 오브젝티브-C 2.0의 깊숙한 곳으로

  1. 조동원

    혹시 pdf 판매 여부 결정되면 메일로 알려주실수 있을까요???
    부탁드립니다~!

    Reply
  2. jeremyko

    책을 사서 처음 부터 읽지 않고 관심있는 부분부터 보는 성격인데, 지금까지 2개의 아이템만을 읽었을 뿐인데 번역의 오류가 보이고, 편집상의 심각한 오류도 보입니다. 인터넷으로 원서내용을 볼수 있는 사이트를 알게돼서 직접 비교해보았습니다.

    page 41, item 6
    ‘보통은 원자성은 필요없다. 더높은 레벨의 쓰레드 안정성을 보장하지 않기 때문이다’
    Usually, atomicity is not required anyway, since it does not ensure thread safety, which usually requires a deeper level of locking.
    –> 원자성이 스레드 안전을 보장 하는것은 아니기에 이를 사용할 일은 별로 없다. 일반적으로, 쓰레드 안전을 위해서는 몇 단계의 잠금이 요구되기 마련이다.
    (‘더 높은’ 이라니? 아주 이해하기 애매함)

    page 141, item 22

    141 페이지 하단 부터,
    ‘그러나 지정 초기화 메서드가 금방 재정의되기 때문에 정의할 필요가 없는 복잡한 구조의 인스턴스 변수를 초기화하는 것 같은 부작용이 있다면 사용하고 싶지 않을 것이다.’
    But you wouldn’t want to do this when the designated initializer has a side effect that you don’t want to happen to the copy, such as setting up complex internal data structures that you are immediately going to overwrite.
    –> 그러나 초기화 이후 즉시 덮어써질 복사본의 복잡한 내부 데이터 구조들에 대해서, 지정된 초기화 코드가 설정을 수행하는 등의 원하지 않는 부작용을 발생 시킨다면 사용하고 싶지 않을 것이다.

    142 페이지 9줄부터
    ‘이 패턴을 사용할 때 가변 클래스에서 가변 복사본을 반환하는 copywithZone을 재정의 해서는 안된다’
    When using this pattern, you should not override copyWithZone: in your mutable class to return a mutable copy.
    –> 이 패턴을 사용할 때, 가변 클래스에서 가변 복사본을 반환하기 위해 copywithZone을 재정의 해서는 안된다.
    ( 반환하는 –> 반환하기 위해 )

    142 페이지 16줄
    ‘주의해야 한다
    Note the subtlety…
    –> 미묘한 차이를 알아야 한다. (절대 동의어가 아닙니다).

    142 페이지 18줄
    ‘동일한 효과를 내는 또다른 방법은 copy, immutableCopy, mutableCopy 메서드가 모두 동일한 클래스를 반환하게 하는 것이다. copy는 항상 같은 클래스를 반환 하지만 다른 두 메서드는 상황에 따라 다른 것을 반환한다’
    Another way this could have been achieved is to have three methods: copy, immutableCopy, and mutableCopy, wherecopy always returns the same class, but the other two return specific variants.
    –> 이를 달성하는 또다른 방법은 copy, immutableCopy, mutableCopy 세가지 메서드를 갖게 하고, copy는 항상 동일한 클래스를 리턴하지만, 다른 둘은 각자의 특정 클래스(immutable, mutable)를 리턴 하게 하는 것이다.
    (완전 오역 임)

    142 페이지 마지막에서 3번째 줄
    –> 이건 그림 3.2 에 대한 설명임. 전혀 관련없는 문맥이 등장하니..편집에 실수가 있네요.

    142 페이지 1줄
    ‘복사를 하는 코드가 복잡해질 것이다’
    but that would add complexity everywhere a copy is taken.
    –> 복사가 발생되는 모든 곳이 복잡해질 것이다.
    (곰곰 읽어보면, 절대 같은 의미가 될수 없습니다. 복사가 아니고 복사가 일어나는 모든곳 입니다. 그래서 책 내용이 이해가 안되는 이유입니다.)

    142 페이지 12 줄
    ‘또 일반적으로 모든 내부 객체를 복사하길 원하지 않는다’
    also, it’s usually not desirable to copy every object.
    –> … 복사하는 것은 바람직하지 않다’

    142 페이지 끝에서 2번째부터
    ‘일반적으로 클래스를 새로 만들 때 시스템 프레임워크가 구현한 방식인 얕은 복사를 하는 copyWithZone: 과 같은 방식으로 클래스의 복사 메서드를 작성 하길 원할 것이다.’
    Usually, you will want your own classes to follow the same pattern as used in the system frameworks, with copyWithZone: performing a shallow copy.
    –> 일반적으로, 당신이 작성한 클래스가 시스템 프레임워크 에서 사용되는 것과 동일한 패턴을 따르기를 원할 것이다 (즉, 얕은 복사를 수행하는 copyWithZone:).

    페이지 144 마지막줄
    ‘자신이 만든 객체가 깊은 목사가 필요하다면 깊은 복사 메서드를 추가하라’
    Consider adding a deep-copy method if deep copies of your object will be useful.
    –> 자신이 만든 객체에 깊은 복사가 유용한 경우에 깊은 복사 메서드 추가를 고려하라.
    –> 곰곰 읽어보면, 절대 같은 의미가 될수 없습니다.

    Reply
  3. jeremyko

    item 7

    44 페이지 19~20줄

    ‘…빈 문자열로 설정할 수 있다. 인스턴스변수를 세터를 통해…’

    The base class EOCPerson might set the last name to the empty string in its default initializer. If it did this through the setter, the subclass’s setter would be called and throw an exception.
    –>…빈 문자열로 설정했을 수 있다. 만약 이것을 세터를 통해…
    (설정 할 수있다..라고 해석을 해서 이해가 안됨. 가능성을 말하는것이지 그렇게 해야한다는게 아님)

    Reply

댓글 남기기