Skip to main content

[리뷰] 스위프트 프로그래밍

스위프트 3 가 발표된 이후로 국내에도 스위프트 3 내용을 다루는 책들이 하나둘씩 출간되고 있습니다. 그리고 지금부터 이야기할 <스위프트 프로그래밍> 역시 그중 한 권입니다.




이 책은 기존에 있던 책들과는 달리 iPhone이나 Mac App 개발에 필요한 내용을 다루지는 않습니다. 개인적으로는 이러한 점 때문에 스위프트란 언어 자체에 좀 더 집중할 수 있었습니다.

책은 크게 다섯 개의 파트로 구성되어 있으며 각 파트별 목차는 다음과 같습니다.


Part Ⅰ 스위프트 기초
1. 스위프트
2. 스위프트 처음 시작하기
3. 데이터 타입 기본
4. 데이터 타입 고급
5. 연산자
6. 흐름 제어
7. 함수
8. 옵셔널


Part Ⅱ 객체지향 프로그래밍과 스위프트
9. 구조체와 클래스
10. 프로퍼티와 메서드
11. 인스턴스 생성 및 소멸
12. 접근제어


Part Ⅲ 함수형 프로그래밍과 스위프트
13. 클로저
14. 옵셔널 체이닝과 빠른종료
15. 맵, 필터, 리듀스
16. 모나드


Part Ⅳ 확장
17. 서브스크립트
18. 상속
19. 타입캐스팅
20. 프로토콜
21. 익스텐션
22. 제네릭
23. 프로토콜 지향 프로그래밍


Part Ⅴ 스위프트 고급
24. 타입 중첩
25. 패턴
26. where 절
27. ARC
28. 오류처리



Part1, 2 까지는 스위프트 언어에 대한 기본적이고 전반적인 내용을 설명합니다. 스위프트를 처음 배우는 독자뿐만 아니라 스위프트를 조금 공부해 본 독자에게도 유용한 내용이 많았습니다. 특히, 스위프트 언어를 사용하는 데 있어 지켰으면 하는 규칙을 반복적으로 설명함으로써 자연스럽게 그러한 규칙이 손에 익히도록 한 점이 좋았습니다. 다만 중간중간 난이도가 갑자기 높아지는 부분이 있어 초심자에게는 책 앞부분에서 조금 힘들 수도 있겠다는 생각이 들었습니다.



Part3 는 아마도 이 책에서 가장 흥미로운 부분이 아닌가 싶습니다. 최근 함수형 프로그래밍의 인기를 그대로 반영한 듯한 목차부터 기본서에는 잘 나오지 않는 <모나드> 까지. 개인적으로 가장 흥미를 가지고 읽은 부분이 아닐까 싶습니다. 다만 <맵, 필터, 리듀스> 나 <모나드> 부분은 Part 4 이후에 나왔으면 어땠을까? 하는 생각이 계속 들었습니다. 사실 제네릭이나 프로토콜을 제대로 알지 못한 상태에서는 Part3 의 내용을 완벽하게 이해하기는 힘들기 때문입니다. 개인적으로 Part 4, 5 를 읽은 다음 Part3 를 읽는다면 더욱 이해하기 쉬울 것이라고 생각합니다.



Part4와 Part5 에서는 스위프트가 가진 특징들을 잘 성명해 주고 있습니다. 특히 스위프트 2부터 자주 언급되고 있는 <프로토콜 지향 프로그래밍> 에 대한 개념과 스위프트를 어떻게 하면 더욱 스위프티하게 사용할 수 있는지를 잘 설명해 주고 있습니다.

마지막에 있는 부록 역시 내용이 알찹니다. Part6 로 분류해도 좋을 정도로 그냥 지나치기에는 아까운 내용이 많으니 반드시 필독하시길 권합니다.



책을 읽는 동안 스위프트가 가진 매력을 설명하기 위해 저자가 얼마나 많은 고민을 했는지 어렴풋이 느낄 수 있었습니다. 특히 기본서에는 잘 언급되지 않는 내용들도 포함시키면서 초보 개발자뿐만 아니라 스위프트로 개발을 하고 있는 개발자에게도 좋을 내용들이 많아 스터디 교재로도 훌륭하겠다는 생각이 들었습니다.

다만 앞부분에서 내용을 간단하게 다루고 뒷부분에서 좀 더 심화 내용을 다루다 보니 흐름이 잠깐씩 끊기는 부분은 아쉬운 점으로 남았습니다. 또한 초판의 경우 중간중간 오탈자가 보이는데 이러한 오탈자로 인해 설명이 잘못되는 부분도 있어 초판을 구입한 독자라면 반드시 한빛 미디어 사이트에서 오탈자를 확인해 봐야 할 것입니다. (한및미디어 사이트: http://www.hanbit.co.kr/media/books/book_view.html?p_code=B5682208459

또한, 초반부에 설명한 사이트 중 일부가 문을 닫아 사용할 수 없는 경우도 있었습니다. 사실 이러한 부분은 어쩔 수 없는 부분이기도 하지만 최신 도서인 점을 감안하면 마지막 검수 단계에서 한번 더 확인되었으면 어땠을까 하는 아쉬움이 듭니다. 

마지막으로 스레드 관련 부분이 없는 점이 조금 아쉬웠습니다. GCD가 스위프트 언어 자체에서 지원하는 기능은 아니지만 그래도 언어에서 스레드를 어떻게 다루는지에 대한 간단한 설명이 있었으면 어땠을까 하는 생각이 들었습니다.



이 책은 스위프트라는 언어가 가진 매력을 보여주기에 충분한 책입니다. 코코아나 코코아 터치 프래임워크에서 벗어나 언어가 가진 본질적인 매력을 느끼고자 하시는 기존 개발자나 스위프트를 처음부터 제대로 공부하고 자하는 개발자에게는 더없이 좋은 책이 될 것입니다. 개인적으로는 한 두세 번 정도 정독을 해야 책에서 전달하고자 하는 내용을 이해하는데 무리가 없을 것으로 생각됩니다. 그만큼 책 내용이 가볍지 않으며 난이도는 조금 있는 편이라고 생각합니다.

Comments

Popular posts from this blog

[Book] 다양한 예제로 학습하는 데이터구조와 알고리즘 for Java

인사이트 에서 Java 를 이용한 자료구조 & 알고리즘 도서가 나온다는 소식을 듣고 기다리고 있었는데, 때마침 JCO 때 인사이트 부스에서 판매하고 있었다. 원래 사려고도 했고, 책도 몇권안남아서 보자마자 바로 구입! fig1. 책 이미지 기다렸던 책이기도 했고, 이참에 자료구조를 재대로 공부해보자 라는 다짐으로 읽기 시작했다. 찾아보니 원서는 Amazon 에서도 별점이 꽤 높아보였다. 아직 초반이지만, 읽으면서 아쉬운 부분을 먼저 좀 써 보려고 한다. 아무래도 많이 기대했던지라, 좋은점 보다는 아쉬운 점이 많이 눈에 보이게 된다. 1. Java 스럽지 않은 코드 인사이트에서 출판한 이 책은 C 버전도 있다. C 버전을 좀 봐야 알겠지만, 아마도 이 책은 C 기반으로 작성 된 후, Java 로 포팅 된 느낌을 강하게 받는다. 역자 서문에서도 저자가 C 기반의 코드로 작성해서 Java 스럽지 못한 부분이 있다고 말하고 있다. 그래도 네이밍 이라던지, 기본적인 코드 스타일이 전혀 Java 스럽지 못하다 보니 보는내내 좀 불편한 기분이 든다. (난 각 언어별로 스타일을 좀 중요시 보는 편이라 아무래도 눈에 많이 거슬리는 편이다.) 또한, 자료구조를 설명하는 과정에서 포인터 라는 단어가 많이 나타난다. 아무래도 C 로 설명한 부분을 Java 로 옮기다 보니 단어 선택이나, 표현방법에서 Java 로 표현하기 애매한 부분이 있는것으로 보인다. C 랑 Java 를 모두 공부했다면 그러려니 할 수 있는 부분이지만, Java 만 조금 알고 있는 상태에서 자료구조를 공부하기 위해 이 책을 구입했다면 아마 설명 부분에서 난해하게 느껴질 수 도 있다. 2. 예제 코드의 오류. 예제코드를 타이핑 하다보면, 스펠링이 틀리거나, 앞에서 소개한 메소드를 사용하는데 메소드명이 서로 다르다거나 하는 문제로 코드가 정상적으로 동작하지 않는 문제가 보인다. 이런 문제는 번역과정에서 조금 아쉬운 문제로 보인다. Amazo...

[Android Application Testing Guide] Chapter3 jar file

Android Application Testing Guide(에이콘) 3장 Sample 을 실행시키기 위해서는 libdummy-0.0.1.jar 가 필요한데, sample file 에는 프로젝트만 존재한다. 결국 jar 를 만들어야 되는데.. ant 빌드다. 어허허... jar 파일이 없으면 예제 진행이 어려우므로. ant build 한 jar 를 첨부. libdummy-0.0.1.jar download

[Python] Core Python Application Programming 예제 3-1 수정

코어 파이썬 애플리케이션 프로그래밍 146~7p 의 예제 3-1 코드가 정상적으로 동작하지 않는 이유는 아래와 같습니다. 문제가 되는 구간은 40~41 라인, 44 라인인데 라인 비교를 위해 38 라인부터 보면, 책의 경우, except ftplib.error_perm: print 'ERROR: cannot read file "%s"' %FILE if os.path.exists(FILE): os.unlink(FILE) else: print '*** Download "%s" to CWD'%FILE f.quit() 그러나 실제로는 아래와 같이 되어야 정상적으로 동작 합니다. except ftplib.error_perm: print 'ERROR: cannot read file "%s"' %FILE if os.path.exists(FILE): os.unlink(FILE) else: print '*** Download "%s" to CWD'%FILE f.quit() 이유인즉, 40~41 라인 코드가 다운로드 완료 if 문으로 동작해서 다운로드 완료 된 파일을 다시 삭제하기 때문입니다. 따라서 전체 동작하는 코드는 아래와 같습니다. #!/usr/bin/env python import ftplib import os import socket HOST = 'ftp.mozilla.org' DIRN = 'pub/mozilla.org/webtools' FILE = 'bugzilla-LATEST.tar.gz' def main(): try: f = ftplib.FTP(HOST) except (socket.er...