Swift로 하는 iOS 프로그래밍
- 원서명iOS 8 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics (ISBN 9781491908907)
- 지은이매트 뉴버그(Matt Neuburg)
- 옮긴이동준상, 이지훈
- ISBN : 9788960777668
- 40,000원
- 2015년 09월 30일 펴냄 (절판)
- 페이퍼백 | 768쪽 | 188*250mm
- 시리즈 : 모바일 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
이 책의 예제는 저자의 깃허브(https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/iOS8bookExamples)에서 내려받을 수 있습니다.
요약
이 책은 스위프트(Swift) 언어를 이용해서 iOS 애플리케이션을 개발하려는 프로그래머, 오브젝티브C 문법에 익숙한 개발자, 그리고 iOS 인터페이스 구성과 작동 원리, 구현 철학을 이해하려는 UI 디자이너를 위한 iOS 앱 개발 입문서다. 스위프트의 기본 철학과 구현 원리를 소개하고, 아이폰과 아이패드 애플리케이션 개발을 위한 코코아(Cocoa) 프레임워크를 스위프트로 구현하기 위한 방법을 매우 세심하게 설명한다. 또, 스위프트의 강력한 기능인 프로토콜, 제너릭과 코코아 프레임워크의 이벤트 구동형 모델, 애플리케이션 개발의 주요 디자인 패턴, 그리고 핵심 기능을 설명한다. 전체적으로는 iOS 8 버전에 기반을 두고 기술되어있지만, iOS 버전에 구애 받지 않고 오래 참고할 수 있는 기본서로서, iOS 9에서 새로 추가된 기능을 iOS 8과 비교한 ‘한국어판 특별 부록’도 수록했다.
이 책에서 다루는 내용
스위프트의 변수와 함수, 스코프(Scope)와 네임스페이스, 객체 타입과 인스턴스 등을 통해 객체지향형 콘셉트를 소개한다.
스위프트의 숫자, 문자열, 레인지, 튜플, 옵셔널, 어레이, 딕셔너리 등 다양한 데이터 타입에 대해 알아본다.
스위프트 객체 타입인 enum, struct, class를 선언하고 초기화하고 수정하는 방법을 소개한다.
스위프트의 강력한 기능인 프로토콜, 제너릭에 대해 알아본다.
엑스코드(Xcode) 프로젝트의 생성에서부터 앱스토어 제출에 이르기까지 전 과정을 살펴본다.
iOS 애플리케이션의 인터페이스 파일인 nib과 nib 편집기인 인터페이스 빌더에 대해 알아본다.
코코아 프레임워크의 이벤트 구동형 모델과 주요 디자인 패턴, 그리고 핵심 기능에 대해 소개한다.
새로운 언어인 스위프트와 기존 코코아 프레임워크에 있는 C, 그리고 오브젝티브C API 간의 소통 방식에 대해 알아본다.
이 책의 구성
iOS 앱을 개발하기 위한 완벽한 기반 지식을 제공하며, iOS 앱 개발에 필요한 세부 행동지침은 물론, 앱 개발의 방향성을 제시하기 위해 노력했다. iOS 프로그래밍 작업을 벽돌을 가지고 집을 짓는 일에 비유하자면, 이 책은 벽돌이 과연 무엇이고, 어떻게 다루어야 할지 설명한다.
이 책을 읽고 나면 스위프트, 엑스코드, 코코아 프레임워크의 구조에 대해 이해하게 될 것이며, 스위프트라는 언어와 UIApplicationMain 함수의 개요, nib 파일 기반의 인터페이스 메커니즘, 코코아의 델리게이션, 노티피케이션, 리테인 사이클에 대한 기반 지식이 부족하다고 느낀다면, 이 책에서 해당 내용에 대한 상세한 설명을 찾을 수 있다.
이 책은 iOS 프로그래밍의 기초를 다지기 위해 필요한 내용을 3개 부로 구성했다.
1부 '스위프트 언어'에서는 프로그래밍 언어를 접해본 적이 없는 독자를 가정해서 스위프트 언어의 기초를 소개한다. 애플의 개발자 문서와는 달리, 체계적, 계통적으로 프로그래밍 언어의 요소를 정리하고 교육학 이론에 입각해 각각의 요소를 결합함으로써 프로그래밍 언어의 기초를 설명한다. 이와 동시에 프로그래밍에 있어 필수적인 내용을 함께 소개한다. 스위프트는 방대한 프로그래밍 언어는 아니지만, 이해하고 있어야 할 미묘한 부분, 지엽적인 부분이 있다. 하지만 지금 당장 이들 내용을 모두 깊이 이해할 필요는 없으며, 이 책에서도 그러한 부분에 대해 상세히 다루지 않는다. 앞으로 프로그래밍을 하면서 이들 지엽적인 요소를 한 번도 써보지 않을 수 있지만, 혹시 이들 요소를 활용해야 할 상황이 된다면 여러분은 이 책에서는 다루지 못한, 깊이 있는 스위프트의 세계로 진입했다고 생각해도 될 듯하다. 바꿔 말하면, 이 책을 무난히 다 읽은 독자라 하더라도 인터넷 등에서 난생 처음 보는 스위프트 코드를 보고 당황할 수 있다는 것이다. 그 이유는 이 책은 iOS 프로그래밍 실용 예제를 소개하는 책이며, 스위프트에 대한 설명 역시 이들 실용 예제를 이해하는 데 필요한 보편적인 내용과 언어의 실용적인 활용법을 중심으로 이뤄지기 때문이다.
2부 'IDE'에서는 사실상 거의 모든 iOS 프로그래밍 작업이 진행되는 엑스코드에 대해 설명한다. 엑스코드 프로젝트의 정의, 앱으로의 변환 방법, 편안하게 엑스코드를 활용하기 위한 문서 참조, 코드 작성, 메뉴 이동, 디버그 방법, 실제 iOS 기기를 통해 앱을 테스트하는 방법, 앱스토어에 앱을 제출하는 방법 등에 대해 소개한다. 또한 인터페이스 구현에 있어 매우 중요한 역할을 하는 nib 파일, nib 편집기인 인터페이스 빌더, 여기서 설정하는 아웃렛(outlet)과 액션, nib 파일의 로딩 방식 등에 대해 설명한다. 단, iOS 인터페이스 개발의 특징 중 하나인 오토레이아웃, 제약에 대한 내용은 기초 수준을 넘어서는 내용이라는 판단에서 이 책에서는 다루지 않는다.
3부 '코코아'에서는 코코아 터치 프레임워크에 대해 설명한다. 코코아 터치 프레임워크는 애플이 만든 iOS 프로그래밍을 위한 유용한 도구의 모음이라 할 수 있다. 코코아는 애플이 만든 여러 프레임워크를 통칭해서 부르는 말이며, iOS 프로그래밍을 위한 전용 API 브랜드가 바로 코코아 터치(Cocoa Touch)다. 개발자가 작성한 코드 대부분은 사실상 이들 코코아 프레임워크 요소와의 상호작용을 위한 것이라 할 수 있다. 코코아 터치 프레임워크는 iOS 앱 구현에 필요한 주요 기능을 제공한다. 프레임워크 사용에 앞서, 개발자는 프레임워크의 작동 방식에 대해 이해할 필요가 있고, 프레임워크가 처리할 수 있는 코드를 작성해야 하며, 프레임워크 활용을 위해 필요한 여러 사항을 빠짐 없이 챙겨줘야 한다. 현 상황에서의 특이점은 코코아는 오브젝티브C라는 언어로 작성됐는데, 여러분은 스위프트라는 언어를 사용한다는 점이며, 이 때문에 스위프트 코드를 통해 코코아의 주요 기능과 작동 방식을 조절할 수 있는 방법을 터득해야 한다. 이 책에서는 코코아가 제공하는 기초 클래스와 카테고리, 프로토콜, 델리게이션, 노티피케이션 등 프로그램의 구조를 이루는 주요 요소를 소개하고, 메모리 관리 기법에 대해서도 설명한다. 아울러 키-값 코딩, 키-값 옵저빙 기법에 대해서도 소개한다.
이 책은 iOS 프로그래머가 갖춰야 할 프로그래밍 기반 지식과 기술을 제공한다. 완벽하게 작동하는 멋진 앱을 만드는 기법을 알려주지는 않지만, iOS 프로그래밍을 하면서 일상적으로 접하게 되는 크고 작은 문제를 해결할 수 있는 방법을 알려준다.
마지막 부록에는 iOS 9의 새로운 기능을 iOS 8과 비교한 한국어판 특별 부록을 수록했다.
목차
목차
- 1부 스위프트 언어
- 1장 스위프트 아키텍처
- 프로그래밍 기초
- 모든 것은 객체인가
- 세 가지 객체 타입
- 변수
- 함수
- 스위프트의 파일 구조
- 유효 범위와 생애주기
- 객체 멤버
- 네임스페이스
- 모듈
- 인스턴스
- 인스턴스를 사용하는 이유
- self
- 객체 내부 정보의 보안
- 디자인 전략
- 객체 타입과 API
- 인스턴스의 생성, 유효 범위, 생애주기
- 정리, 그리고 결론
- 2장 함수
- 함수의 파라미터와 반환 값
- Void 리턴 타입과 파라미터
- 함수 서명
- 외부 파라미터 이름
- 오버로딩
- 기본 설정 파라미터 값
- 다수의 인수를 지니는 파라미터
- 무시되는 파라미터
- 수정 가능 파라미터
- 함수 안의 함수
- 재귀
- 값으로서의 함수
- 익명 함수
- 함수 정의와 호출
- 클로저
- 클로저를 통한 코드의 개선
- 함수를 반환하는 함수
- 변수 값을 유지하기 위한 클로저
- 함수의 내용을 유지하기 위한 클로저
- 커리 함수
- 함수의 파라미터와 반환 값
- 3장 변수와 데이터 타입
- 변수의 유효 범위와 생애주기
- 변수 선언
- 컴퓨터 연산에 의한 초기화
- 컴퓨터 연산에 의한 변수 생성
- 세터 옵저버
- 지연 초기화
- 내장된 변수 타입
- 불 타입 데이터
- 숫자 데이터 타입
- 스트링
- 캐릭터
- 레인지
- 튜플
- 옵셔널
- 4장 객체 타입
- 객체 타입의 선언 방식과 타입별 특징
- 초기화 함수
- 프로퍼티
- 메소드
- 서브스크립트
- 네임스페이스 객체 타입
- 인스턴스 레퍼런스
- 열거형
- 고정 값 있는 케이스 문
- 타입이 있는 케이스문
- Enum 초기화 함수
- Enum 프로퍼티
- Enum 메소드
- Enum을 사용하는 이유
- 구조체
- Struct 초기화 함수, 프로퍼티, 메소드
- 네임스페이스로서의 Struct
- 클래스
- 밸류 타입, 레퍼런스 타입
- 서브클래스와 수퍼클래스
- 클래스 초기화 함수
- 클래스 초기화 해제 함수
- 클래스 프로퍼티와 메소드
- 다형성
- 캐스팅
- 타입 레퍼런스
- 프로토콜
- 프로토콜을 사용하는 이유
- 프로토콜 타입 확인과 캐스팅
- 프로토콜 선언하기
- 옵셔널 프로토콜 멤버
- 클래스 프로토콜
- 암묵적인 필수 초기화 함수
- 리터럴 컨버터블
- 제네릭
- 제네릭 선언하기
- 타입 제약
- 명시적인 특정화
- where절
- 익스텐션
- 엄브렐러 타입
- 애니오브젝트
- 애니클래스
- 애니
- 컬렉션 타입
- 배열
- 딕셔너리
- 세트
- 객체 타입의 선언 방식과 타입별 특징
- 5장 플로우 콘트롤, 프라이버시, 메모리 관리
- 플로우 콘트롤
- 브랜칭
- 루프 조건문
- 조건문 건너뛰기
- 프로그램의 중지
- 연산자
- 프라이버시
- 프라이빗 선언
- 퍼블릭 선언
- 프라이버시 규칙
- 내적 관찰
- 메모리 관리
- weak 레퍼런스
- unowned 레퍼런스
- 익명 함수의 weak, unowned 레퍼런스
- 프로토콜 타입 레퍼런스의 메모리 관리
- 플로우 콘트롤
- 2부 IDE
- 6장 엑스코드 프로젝트의 구조
- 새로운 프로젝트
- 프로젝트 윈도우
- 내비게이터 창
- 유틸리티 창
- 에디터
- 프로젝트 파일과 관련된 파일
- 타깃
- 빌드 단계
- 빌드 설정
- 환경 설정
- 스키마와 데스티네이션
- 프로젝트에서 앱 실행까지
- 빌드 설정
- 프로퍼티 리스트 설정
- 닙 파일
- 추가 리소스
- 코드 파일과 앱 시작 프로세스
- 프레임워크와 SDK
- 프로젝트 내 항목에 대한 이름 변경
- 다중 언어 타깃
- 7장 닙 관리
- 닙 에디터 인터페이스 살펴보기
- 도큐먼트 아웃라인
- 캔버스
- 인스펙터와 라이브러리
- 닙 로딩
- 닙 파일이 로딩되는 시점
- 수작업 닙 로딩
- 커넥션
- 아웃렛
- 닙 오너
- 자동적으로 설정된 닙
- 잘못 설정된 아웃렛
- 아웃렛 삭제
- 아웃렛을 만들기 위한 다른 방법들
- 아웃렛 콜렉션
- 액션 연결
- 액션을 생성하는 다른 방법들
- 잘못 구성된 액션
- 닙 간의 연결: 불가능
- 닙 기반 인스턴스의 추가 설정
- 닙 에디터 인터페이스 살펴보기
- 8장 도큐멘테이션
- 도큐멘테이션 윈도우
- 클래스 도큐멘테이션 페이지
- 샘플 코드
- 퀵 헬프
- 심볼
- 헤더 파일
- 인터넷 리소스
- 9장 프로젝트 생명주기
- 디바이스 아키텍처와 조건부 코드
- 이전 버전과의 호환성
- 디바이스 타입
- 버전 관리
- 코드 편집과 탐색
- 자동 완성
- 코드 스니핏
- Fix-it 기능과 라이브 구문 검사
- 내비게이션
- 찾기
- 시뮬레이터에서 실행하기
- 디버깅
- 케이브맨 디버깅 기술
- 엑스코드 디버거
- 단위 테스트
- 클린
- 디바이스에서 실행하기
- 인증서 획득
- 개발 프로비저닝 프로파일 얻기
- 앱 실행
- 프로파일과 디바이스 관리
- 프로파일링
- 게이지
- 인스트루먼트
- 지역화
- Info.plist 파일 지역화
- 닙 파일 지역화
- 코드 문자열의 지역화
- XML 파일 지역화
- 아카이빙 및 배포
- 애드혹 배포
- 앱 배포를 위한 마지막 준비사항
- 앱에서 필요한 아이콘
- 다른 아이콘
- 런치 이미지
- 스크린샷과 비디오 프리뷰
- 프로퍼티 리스트 세팅
- 앱스토어에 제출
- 디바이스 아키텍처와 조건부 코드
- 3부 코코아
- 10장 코코아 클래스
- 서브클래스화
- 카테고리와 익스텐션
- 스위프트에서 익스텐션을 사용하는 방법
- 익스텐션을 사용하는 방법
- 코코아에서 카테고리를 사용하는 방법
- 프로토콜
- 인포멀 프로토콜
- 옵셔널 메소드
- 파운데이션 클래스
- 유용한 구조체와 상수
- NSString과 관련 클래스
- NSDate와 관련 메소드
- NSNumber
- NSValue
- NSData
- 동등과 비교
- NSIndexSet
- NSArray와 NSMutableArray
- NSDictionary와 NSMutableDictionary
- NSSet과 관련 메소드
- NSNull
- 불변 객체과 가변 객체
- 프로퍼티 리스트
- 접근자, 속성, 키-밸류 코딩
- 스위프트 접근자
- 키-밸류 코딩
- 키-밸류 코딩 사용하기
- KVC와 아웃렛
- 키 패스
- 배열 접근자
- NSObject의 비밀
- 11장 코코아 이벤트
- 이벤트를 받는 이유
- 서브클래싱
- 노티피케이션
- 노티피케이션 수신
- 등록 취소
- 노티피케이션 게시
- NSTimer
- 델리게이션
- 코코아 델리게이션
- 델리게이션 구현
- 데이터 소스
- 액션
- 리스폰더 체인
- 책임 전가
- 닐에 타깃된 액션
- 키-밸류 옵저빙
- 쇄도하는 이벤트
- 지연 성능
- 12장 메모리 관리
- 코코아 메모리 관리 법칙
- 코코아 메모리 관리 규칙
- ARC와 ARC가 하는 일
- 코코아 오브젝트가 메모리를 관리하는 방법
- 오토릴리스 풀
- 인스턴스 프로퍼티에서 메모리 관리
- 리테인 사이클과 위크 레퍼런스
- 비정상적인 메모리 관리 상황
- 닙 로딩과 메모리 관리
- CFTypeRef의 메모리 관리
- 프로퍼티 메모리 관리 정책
- 메모리 관리 실수 디버깅
- 13장 오브젝트 간 통신
- 인스턴스화의 가시성
- 관계에 의한 가시성
- 글로벌 가시성
- 노티피케이션과 KVO
- 모델-뷰-컨트롤러
- 부록. C, 오브젝티브C, 그리고 스위프트
- 한국어판 특별 부록, iOS 9 vs iOS 8