[독후감] 아론 힐리가스의 오브젝티브-C 프로그래밍

백상휘·2023년 12월 31일
1

프로그래밍을 업으로 삼았다면 직업인으로서, 비즈니스적으로서 프로그래밍을 접근하는 시각도 필요한 것 같다. 프리랜서로 활동하는 지금 Objective-C(줄여서 objc) 가 필요하다 느낀 이유는 "레거시 프로젝트의 기능 수정이나 오류 수정이 필요한데...." 에 가장 적합한 것은 잠깐 왔다 갈 프리랜서가 가장 적합하다고 느꼈기 때문이다.

위의 사유로 objc 공부에 돌입했다.

책을 선정한 이유

그 전에 왜 책인가부터 얘기하고 싶다.

사실 objc 책은 약 2015 년을 기점으로 더 이상 출판되지 않는 것 같다. 인터넷 강의와 같은 컨텐츠들도 더 이상 생산되지 않고 있다. 그리고 블로그 포스팅도 간단한 문법만 다룰 뿐 objc 를 "배운다"는 것에 실질적인 도움을 주는 것은 레거시라고 말할만한 책 말고는 없었다.

즉, 옛날 자료라서 현재와는 맞지 않는 부분이 있더라도 양질의 자료를 발굴하는 수 밖에 없었던 것이다.

왜 이 책인가?

사실 이 책 말고도 다른 책들을 여럿 보았다. 실패를 경험하면서 이 책에 가장 끌린 이유는 다음과 같다.

  • 명확하고 직관적이다. 주제를 조금도 벗어나지 않고 일직선으로 얘기한다는 느낌을 받았다.
  • 저자인 아론 힐리가스는 NeXT 를 거쳐 애플에서 근무한 사람이다. objc 에 대한 이해도가 굉장한 사람일거란 생각이 있었다.

그리고 난 이 책에 상당히 만족스럽다.

내용에 대해

이 책은 상당히 독특한데, C언어로 시작해서 C언어로 끝난다. 그 이유는 책의 초반 "서막"이라는 장에서 설명한다.

왜 먼저 C를 설명하겠다고 할까? 오브젝티브-C 프로그래머라면 예외 없이 C에 대한 이해가 매우 깊다. 또한 오브젝티브-C로는 복잡해 보이는 수많은 개념들도 그 뿌리에 해당하는 C의 시각에서는 매우 단순해진다. 이런 이유로 개념을 설명할 때는 C를 사용하고, 관련 지식을 여러분이 섭렵할 수 있도록 안내할 때는 오브젝티브-C를 사용하는 일이 잦을 것이다.

즉, 개념이 많이 겹친다는 것이다. C에 이해가 있는 사람들이 내심 부러워지는 순간이었다.

번역에 대해

특히 이 책의 번역은 놀라우면서 "이런 책이 더 많으면 재밋겠다" 라는 생각이 들었다. 부정적인 어투로 하는 말이 아니다.

예를 들어 본문 중 이런 얘기가 있다.

(지금 이런 충고는 프로그래밍 입문자에게만 국한되는 것이 아니다. 어느 집단에나 꼭 이런 사람 은 한 명씩 있다. "멀티스레드로 동작하는 앱을 만들 때 세터 메소드를 atomic으로 설정해야 보호 를 받을 수 있어."라고 말하는, 아는 것이 힘이 아닌 병인 사람이다. 그런 사람에게 한마디하겠다.
*멀티스레드 코드를 작성할 일은 별로 없을 텐데. 설령 작성하게 되더라도 세터 메소드를 atomic 으로 설정해봐야 아무런 도움이 안 되지 하지만 정작 하고 싶은 말은 따로 있다."'OK 그렇다면 세터들을 그냥 atomic으로 놔둬." 소 귀에 경 읽기이기 때문이다.)

atomic이나 nonatomic을 선택할 기준 중

어투가 기존 개발 관련 책들과는 다르다. 이런 내용들도 있는 걸 보면 대충 꽤 솔직한 매력이 있는 사람인 것 같다.

미키 워드(Mikey Ward)는 '첫 iOS 애플리케이션', '첫 코코아 애플리케이션', '블록' 등의 장을 써주었다. 내가 만약 좀 더 친절한 상사였다면 그의 이름이 표지에 실렸을지도 모른다.

감사의 글 중

누구에게 추천하는가?

이 책은 Swift 를 이용해 iOS 앱 개발이 가능한 개발자 중 objc 에 관심이 있는 분들에게 추천한다.

추가로, 나는 아직 구매하지 않았다. 주변 도서관에 이 책을 검색해보자. 있을 확률이 높다. 필자는 의정부에 거주중인데, 의정부 과학도서관에서 찾았다.

책의 내용

앞에서 말한 대로 이 책은 C언어로 시작해 C언어로 끝났다.


참고로 나는 2 개의 내용을 빼고 4일 동안 매일 4시간 정도 읽었다.

  • C 언어 고급
  • 첫 코코아 애플리케이션

이번주에는 C 언어보다는 objc 문법에 충실하고 싶었기도 했고, MacOS 개발은 아직 나랑은 너무 먼 얘기였다.


C 언어 시작하기

이 앞의 내용은 뭐... 그냥 그런 내용이다. C 가 중요하다.. 프로그래머는 이래야 한다.. Xcode 는 이렇게 깐다..

대부분 이 책을 현재 읽는 사람은 Swift 강의나 책을 한번 쯤 본 사람들이라고 생각한다. 이 부분에 대해 할 말은 거의 없다.

이후에 Xcode 로 C 언어 프로그램을 작성하기 시작한다.

  • 변수/타입 선언
  • if, while, for...
  • 함수
  • 주소와 포인터에 대한 이해, 참조
  • 구조체

나도 처음에는 몰랐는데 변수가 값을 저장한 경우 직접 저장하지만, 객체를 저장할 경우엔 힙 내의 객체가 저장된 주소를 저장한다는 사실을 이 책을 읽으면 자연스레 이해하게 된다.

objc 공부하기

Swift, Java 만 경험한 나로서는 객체의 포인터, id 변수는 좀 서툴렀다. 하지만 금방 사용법은 알 수 있었다.

더블 포인터 얘기같은 것들이 종종 나오던데 "안다"고 하기에는 한참 먼 얘기인 것 같다.

이후에는 함수 호출을 "메시지" 를 보내는 형태로 이해해야 한다는 사실을 알려준다. 실제로 저자는 "."으로 함수를 호출하기 보다 "메시지" 를 이용해 함수를 호출하는 것이 좀 더 명확해서 즐겨 사용한다고 한다.

그 이후에는 주로 사용되는 객체들인 NSString, NSArray 로 위에서 배운 개념들을 복습하기 시작한다.

그러면서 자연스레 클래스로 넘어간다. 클래스를 작성하고 인스턴스화하여 사용하고 상속을 하면서 자연스레 Swift 의 Scope 와 비슷한 Frame 이라는 개념을 배우게 된다.

클래스, 객체, 인스턴스 등이 나오면 면접 질문 단골인 ARC, 메모리 누수가 나오게 된다. 언제 나오나 궁금했다. MRC 가 나오나 싶어 두근두근 했는데 ARC 로 설명해서 편안한 마음으로 읽었다. 읽다보니 예전에 정리한 내용도 생각이 나서 추가로 공유하도록 한다.

https://github.com/SangHwi-Back/iOS-Interviews/blob/main/LowLevel/ARC/AutoReferenceCounting.md

이제 다 나왔나 싶었는데 컬렉션을 집중적으로 다루기 시작한다. NSArray/NSMutableArray, NSSet/NSMutableSet, NSDictionary/NSMutableDictionary 를 다루기 시작한다.

이제는 상수를 다룬다. 전역변수는 예전에도 잘 쓰곤 했나보다.

생각해보니 아직 다루지 않은게 여럿 있다. NSData, Callback, Protocol, plist 를 차례대로 다룬다.

앱 만들기

iOS, MacOS 앱을 차례로 만들어본다. 이 부분은 각자의 판단에 따라 자유롭게 읽어도 될 것 같다.

오브젝티브-C 고급

자신만의 init 메소드를 작성하는 방법을 알려준다. 그러면서 모든 init 이 결국 designate init 을 호출하도록 해야 한다는 꿀팁도 전달해준다. 이 부분은 Swift 개발할 때도 참고할만한 것 같다.

이후에는 objc 프로퍼티들에 대해 자세히 다룬다. weak 같은 반가운 얼굴들도 나오고 let 을 대체하는 readonly 도 나온다. atomic, nonatomic 도 굉장히 흥미로운 내용이다.

카테고리는 Swift 에서 경험한 extension 과 같은 개념이다.

대망의 블록이 나오는데 closure 와 같은 개념이다. Swift 보다 어려울 순 있지만 Swift 에서 활용할 수 있는 기능은 objc 에도 구현되어 있는 것 같다.

책을 읽은 방법

2번 이상 읽을 생각은 했다. 그렇기 때문에 처음 빠르게 훑기 위해서 4일 간 읽는 목표를 삼았다.

그래도 후루룩 읽어버리면 후루룩 없어져 버릴 것만 같아서 필사를 하며 읽었다. 타자를 치며 읽었다는 것이다. 내용을 private 레포에 푸시 하면서 깃헙 잔디도 좀 심었다.

이제 두 번쨰 읽을 타이밍이다. 이제는 좀 심오하게 읽으며 놓친 부분을 다시 상기시키는 시간을 5일동안 가져볼 생각이다.

이 다음은? objc 만 사용해서 앱 하나 만드는 것이 당연한 수순일 것이다. 그것이 저자의 생각이기도 하다.

이 책은 Mac 컴퓨터 앞에서 읽히도록 짜여 있다. 개념 설명을 읽고 나면 그와 관련된 내용을 실제로 체험할 텐데, 이 체험은 선택이 아니다. 체험하지 않는다면 책을 정말로 이해했다고 할 수 없다. 프로그래밍을 배우는 가장 적합한 방법은 코드를 일일이 입력하고, 그러다 오타가 생기면 직접 고치고 하는 과정을 겪어 프로그래밍 언어의 패턴에 익숙해지는 것이다. 단순히 코드를 읽고 개념을 이론적으로 이해한다고 해서 여러분에게 도움이 된다거나 여러분의 능력이 향상되지 않는다.

Reference

profile
plug-compatible programming unit

0개의 댓글