Swift Fundamentals by Mark Lassoff Copyright 2014 All rights reserved Korean Translation Copyright 2015 by J-Pub. co. The Korean edition was published

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

SIGIL 완벽입문

iOS ÇÁ·Î±×·¡¹Ö 1205.PDF

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 중간착취의 금지 41 - 대판 , 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 , 2002도3883 [남녀고용평등법위

1

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

SBR-100S User Manual

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

View Licenses and Services (customer)

금오공대 컴퓨터공학전공 강의자료

Tcl의 문법

게임 기획서 표준양식 연구보고서

PowerPoint Presentation

PowerPoint 프레젠테이션


Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

°æÁ¦Àü¸Á-µ¼º¸.PDF

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

1

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집

ThinkVantage Fingerprint Software

OCW_C언어 기초

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

Microsoft PowerPoint - chap10-함수의활용.pptx

<B3EDB9AEC0DBBCBAB9FD2E687770>

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제

C++ Programming

C++ Programming

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

MF Driver Installation Guide

Microsoft PowerPoint - e pptx

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

178È£pdf

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

wtu05_ÃÖÁ¾

Windows 8에서 BioStar 1 설치하기

윈도우시스템프로그래밍


INDUS-8.HWP

CONTENTS.HWP


Microsoft Word - src.doc

서현수

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

H3250_Wi-Fi_E.book

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Visual Basic 반복문

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Studuino소프트웨어 설치

PowerPoint Presentation

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

4S 1차년도 평가 발표자료

1809_2018-BESPINGLOBAL_Design Guidelines_out

내지-교회에관한교리

0.筌≪럩??袁ⓓ?紐껋젾 筌

언리얼엔진4_내지_ indd

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

Microsoft PowerPoint - additional01.ppt [호환 모드]

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

mobile_guide_SA

Microsoft PowerPoint - ch07 - 포인터 pm0415

ez-shv manual

SH100_V1.4

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

목 차 1. 드라이버 설치 설치환경 드라이버 설치 시 주의사항 USB 드라이버 파일 Windows XP에서 설치 Windows Vista / Windows 7에서 설치 Windows


vRealize Automation용 VMware Remote Console - VMware

사물인터넷비즈니스빅뱅_내지_11차_ indd

OCW_C언어 기초

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

Endpoint Protector - Active Directory Deployment Guide

Install stm32cubemx and st-link utility

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft Word - 문필주.doc



쉽게

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

RHEV 2.2 인증서 만료 확인 및 갱신

본책- 부속물

LATEX과 Mendeley를 활용한 문헌 관리 2017년 2월 6일 제1절 서지 관리 프로그램 연구 주제를 찾거나 선행 연구를 조사하는 가장 대표적인 방법이 문헌들을 찾아보는 것이다. 수없이 많은 논문들을 찾게 되고, 이런 논문들을 다운로드한 후 체계적으로 관리할 필

JAVA PROGRAMMING 실습 02. 표준 입출력

iOS5_1±³

Transcription:

Swift Fundamentals by Mark Lassoff Copyright 2014 All rights reserved Korean Translation Copyright 2015 by J-Pub. co. The Korean edition was published by arrangement with Mark Lassoff c/o LearnToPrograms, Inc. through Agency-One, Seoul. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 제이펍에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. 초판 1쇄 발행 2015년 5월 8일 지은이 마크 라소프 / 토마스 스타초위츠 옮긴이 심재철 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406 2009 000087호 주소 경기도 파주시 문발로 141 뮤즈빌딩 403호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr / 이메일 jeipub@gmail.com 편집부 이민숙, 이 슬, 이주원 / 소통 기획팀 현지환 본문디자인 성은경 / 표지디자인 미디어픽스 용지 신승지류유통 / 인쇄 해외정판사 / 제본 광우제책사 ISBN 979-11-85890-21-0 (93000) 값 24,000원 이 책은 저작권법에 따라 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금지하며, 이 책 내용의 전부 또는 일부를 이용하려면 반드시 저작권자와 제이펍의 서면동의를 받아야 합니다. 잘못된 책은 구입하신 서점에서 바꾸어 드립니다. 제이펍은 독자 여러분의 아이디어와 원고 투고를 기다리고 있습니다. 책으로 펴내고자 하는 아이디어나 원고가 있으신 분께서는 책의 간단한 개요와 차례, 구성과 저(역)자 약력 등을 메일로 보내주세요. jeipub@gmail.com

드리는 말씀 이 책에 기재된 내용을 기반으로 한 운용 결과에 대해 저자, 역자, 소프트웨어 개발자 및 제공자, 제이펍 출판사는 일체의 책임을 지지 않으므로 양해 바랍니다. 이 책에 등장하는 각 회사명, 제품명은 일반적으로 각 회사의 등록 상표 또는 상표입니다. 본문 중에는 TM, C, R 마크 등이 표시되어 있지 않습 니다. 이 책에서 사용하고 있는 제품 버전은 독자의 학습 시점이나 환경에 따라 책의 내용과 다를 수 있습니다. 참고로, 이 책의 번역 환경은 다음과 같습니다. ios 8.3, Xcode 6.3, Swift 1.2 본문 중 일본 내의 실정에만 국한되어 있는 내용이나 그림은 일부를 삭제하거나 국내 실정에 맞도록 변경하였으니 참고 바랍니다. 책 내용과 관련된 문의사항은 옮긴이나 출판사로 연락해 주시기 바랍니다. 옮긴이: jcspro@hanafos.com 출판사: jeipub@gmail.com

차례 옮긴이 머리말 저자 소개 베타리더 후기 ix xi xiii 01 시작하기 1 1.1 Swift 개요 1 복습 문제 9 1.2 Xcode IDE 사용하기 10 복습 문제 20 1장 연습 문제 21 02 변수 23 2.1 변수와 상수 생성하기 23 복습 문제 30 2.2 변수 타입 이해하기 31 복습 문제 35 2.3 산술 연산자 36 복습 문제 40 2.4 타입 변환 41 복습 문제 43 2.5 문자열 삽입 44 복습 문제 48 2장 연습 문제 49 차례 v

03 흐름 제어 51 3.1 if 문 51 복습 문제 58 3.2 다중 if 문과 복합 if 문 59 복습 문제 66 3.3 switch 문 67 복습 문제 71 3.4 while 루프 72 복습 문제 78 3.5 for 루프 79 복습 문제 82 3.6 for-in 루프 83 복습 문제 86 3장 연습 문제 87 04 배열과 딕셔너리 89 4.1 배열을 생성하고 변경하기 89 복습 문제 94 4.2 Array.count()와 Array.slice() 95 복습 문제 100 4.3 배열 함수 101 복습 문제 109 4.4 딕셔너리 생성하기 110 복습 문제 114 4.5 딕셔너리 함수 115 복습 문제 120 4장 연습 문제 121 05 함수 123 5.1 함수 정의와 호출 123 복습 문제 127 vi 차례

5.2 함수는 인자를 받는다 128 복습 문제 132 5.3 함수는 값을 반환한다 133 복습 문제 139 5.4 변수/상수 범위와 함수 140 복습 문제 144 5.5 중첩 함수 145 복습 문제 148 5장 연습 문제 149 06 클래스와 프로토콜 151 6.1 열거형 151 복습 문제 159 6.2 클래스와 인스턴스 생성하기 160 복습 문제 168 6.3 서브 클래스와 오버라이딩 169 복습 문제 177 6.4 프로토콜 178 복습 문제 182 6장 연습 문제 183 07 SWIFT 추가로 알아보기 187 7.1 익스텐션 187 복습 문제 191 7.2 연산자 오버로딩 192 복습 문제 195 7.3 제네릭 196 복습 문제 199 7.4 에모지 200 복습 문제 202 7장 연습 문제 203 차례 vii

08 Swift로 ios 앱 만들기 205 8.1 앱 레이아웃 생성하기 205 복습 문제 216 8.2 아울렛과 액션 생성하기 217 복습 문제 226 8.3 앱을 실행하고 테스트하기 227 복습 문제 233 8장 연습 문제 234 복습 문제 답안 238 찾아보기 253 viii 차례

옮긴이 머리말 정성과 최선을 다했습니다. 한마디로 요약해서 독자 여러분께 드리고 싶은 제 진심의 표현입니다. 매번 번역서를 낼 때마다 항상 그렇듯이, 제가 저술하는 마음으로 이 일에 임했고 또 그렇게 마무리했습니다. 용어 하나하나, 내용 모두에 걸쳐 심사숙고하고, 여러 차례에 걸친 원고 검토 끝에 완성된 이 책을 보면서 이제야 마음이 흐뭇해집니다. 좋은 내용을 독자 여러분께 제대로 전달할 수 있을 것이라는 기대감 때문일 겁니다. 애플에서는 ios와 OS X 애플리케이션을 개발할 수 있는 새로운 프로그래밍 언어인 Swift 를 발표하고 핵심 언어로 사용할 뜻을 공표한 바 있습니다. Swift는 기존의 오브젝티 브-C(Objective-C)는 물론 자바나 C++ 등이 가진 장점을 대부분 수용하고 있는 강력한 기능 을 지닌 프로그래밍 언어입니다. 따라서 Swift를 사용하면 어떤 형태의 ios와 OS X 애플리케 이션도 개발할 수 있습니다. 그러나 제대로 활용하기 위해서는 알아야 할 것이 너무 많아서 어려운 측면도 있습니다. 이 책에서는 언어를 쉽게 배울 수 있도록 기본적이고 핵심적인 사항 을 알려줍니다. 그리고 다양한 코드 예를 통해 직접 실습하면서 배우도록 구성되어 있습니다. 특히 프로그래밍 언어에 입문하는 초보자에게 적합한 책입니다. Swift로 ios와 OS X 애플리 케이션의 개발을 시작하려는 분들에게 권하고 싶습니다. 이 책을 번역하면서 다음과 같은 부분에 중점을 두었습니다. 1. 용어를 잘 이해하는 것이 제일 중요하므로, 용어 선정에 유의하였습니다. 때로는 용어 하나 때문에 많은 시간을 고민하기도 했지요. 제가 실무에서 오랫동안 경험했던 지식을 바탕으 로 가장 적합한 번역 용어 선정에 많은 노력을 했습니다. 2. 여러분의 이해를 돕는 데 필요한 보충 설명을 많이 넣었습니다. 옮긴이 머리말 ix

3. 본문이나 소스 코드에서 결함이 있는 내용을 하나하나 확인해 가면서 수정하였습니다(원서 의 개정판이라고 생각하셔도 될 듯합니다). 참으로 긴 시간이었던 것 같습니다. 독자들에게 도움이 될 수 있는 책을 만들어야 한다는 집 념이 있었기에 모든 어려움을 참아낼 수 있었습니다. 이 책을 출판하는 데 아낌없는 배려와 수고를 해주신 제이펍 출판사의 장성두 사장님과 실무에서 많은 노력과 수고를 해주신 이주 원 님께 진심으로 감사드립니다. 2015년 5월 역자 심재철 드림 x 옮긴이 머리말

저자 소개 마크 라소프_Mark Lassoff 부모님은 내가 프로그래머의 삶을 타고났다고 말씀하셨다. 1980년대 중반에 이웃집 아이들 이 밖에서 발야구를 하거나 눈싸움을 하며 놀 때, 나는 BASIC 프로그래밍 언어로 게임을 작 성하느라 내 코모도르 64 컴퓨터와 씨름하고 있었다. 대학에서 컴퓨터 공학을 전공할 때도 여 전히 컴퓨터 프로그래밍이 최대 관심사였으며, 대학을 졸업한 후에는 여러 대기업의 소프트웨 어 개발 부서에서 근무했다. 또래들이 닷컴 세계에 빠져 있던 2001년에는 잠시 텍사스 오스틴의 기술 교육 센터에서 프로 그래머 교육을 담당하는 직위를 맡았다. 그리고 이를 계기로 프로그래밍을 가르치는 일에 매 료되었다. 지난 10년간 프로그래밍을 가르치는 일에 열중하였고, 오늘날에는 최고의 기술 트레이너로서 여러 곳을 다니며 소프트웨어와 웹 개발자 교육 과정을 맡고 있다. 담당했던 교육 훈련 고객 중에는 미 국방성, 록히드 마틴, DCS(Discover Card Services), 카이저 퍼머넌트 연구소 등이 포 함되어 있으며, 전통적인 강의실 교육과 더불어 교육 과정을 웹으로도 운영하고 있다. 현재 코네티컷 주 하트퍼드 인근에 살고 있다. 저자 소개 xi

기술 저자 토마스 스타초위츠_Tomas Stachowitz 플로리다에서 태어났지만 어린 시절을 북서부 코네티컷 주에서 보냈다. 항상 기술 글쓰기에 관심이 있었으나 고등학교 때까지는 프로그래밍을 하지 않았다. 그리스의 아테네에 있는 인디 애나폴리스 대학의 해외 캠퍼스에서 언론학을 공부하였고, 그 후에는 영국, 그리스, 뉴욕, 애 리조나, 콜로라도, 워싱턴 DC, 버지니아에서 살다가 군에서 복무하기도 했다. 지금은 코네티 컷 주에 돌아와서 기술 글쓰기에 전념하고 있다. 여유가 있을 때면 하이킹과 게임을 즐기며, 예쁜 아내인 크리스타 그리고 두 고양이와 함께 시 간을 보낸다. xii 저자 소개

베타리더 후기 백경윤(다음카카오) ios 개발을 시도하면서 가장 힘들었던 점을 꼽으라면, 오브젝티브-C였던 것 같습니다. Swift 는 이러한 오브젝티브-C의 벽을 깰 수 있도록 도와주며, 이 책은 그런 Swift를 가벼운 마음으 로 체험해볼 수 있도록 해주는 도서입니다. 송종근(위시컴퍼니) 최신의 언어라고 할 수 있는 Swift를 차근차근 배워나갈 수 있도록 도와주는 매우 친절한 참 고서입니다. 새로 나온 기술이나 언어는 배울 곳이 마땅치 않아 배우고 활용하기가 항상 어렵 습니다. 하지만 이제 Swift는 그런 단계를 넘어서는 것 같네요. 그런 의미에서 이번 책이 많은 분께 도움이 될 것 같습니다. 이상현(SI 개발자) 플랫폼에 종속적이지 않다면 수많은 사람이 Swift를 즐길 거라 생각될 정도로 정말 쉽습 니다. 내용은 프로그래밍을 처음 시작하시는 분들도 어려움 없이 이해할 수 있도록 구성되 어 있으며, 새로운 언어를 배우는 데 주저하시는 분들도 이 책을 읽고 나면 어느새 Xcode의 Playground에서 Swift로 코딩하는 자신을 발견하게 되실 겁니다. 정원재(예티소프트) 최근 새로운 Mac OS, ios 개발 언어로 관심을 받고 있는 Swift에 대한 전반적인 부분을 알 수 있는 좋은 책입니다. Xcode에 대한 설명도 함께 되어 있어서 처음 접하는 사람도 쉽게 따라 할 수 있을 것 같고, 다른 언어를 사용하던 개발자가 처음 Swift를 접할 때도 훌륭한 참고 교 재가 될 것 같습니다. 베타리더 후기 xiii

조우진(티켓몬스터) 새로운 언어를 배우는 일은 늘 재미있는 일입니다. 이 책을 통해 또 다른 프로그래밍 언어인 Swift를 처음으로 접해 보았는데, 최신 언어답게 군더더기 없이 시원한 느낌의 동적 타입 스크 립트 언어의 모습을 갖추고 있습니다. 이 책은 Swift를 다루지만 기본 개념도 놓치지 않고 차 근히 설명해줍니다. 챕터마다 핵심적인 키워드와 용어들을 콕콕 집어서 설명해주므로 프로그 래밍에 익숙지 않은 분들에게도 권하고 싶은 책입니다. 최해성(티켓몬스터) 더 쉽게, 더 깊게 시리즈는 독자에게 흥미를 불러일으킬 내용을 쉽게 풀어나가는 것이 특징입 니다. 이 책도 프로그래밍에 대한 기본적인 지식을 지니고 있으면서 Swift를 처음 배우는 사람 을 대상으로 합니다. 입문서인 만큼 본격적인 Swift를 배우기 전에 몸풀기( )용 서적으로 생각 하면 적당할 것 같습니다. 제이펍은 책에 대한 애정과 기술에 대한 열정이 뜨거운 베타리더들로 하여금 출간되는 모든 서적에 사전 검증을 시행하고 있습니다. xiv 베타리더 후기

01 이 장에서 배울 내용 시작하기 Xcode와 Swift를 설치하고 준비한다. Xcode playground의 기본적인 사용법을 알아본다. 간단한 프로그램을 생성하고 실행하는 방법을 배운다. Xcode를 앱 개발에 활용하는 방법을 이해한다. 간단한 아이폰(iPhone) 앱을 생성하고 실행한다. 1.1 Swift 개요 Swift(스위프트)의 세계에 온 여러분을 환영한다! 이 책에서 여러분은 애플 ios 플랫폼 애플리 케이션(이하 앱)을 개발할 수 있도록 Swift 프로그래밍의 기초를 배울 것이다. 이 책은 초보자 를 위한 것이므로 프로그래밍 경험이 전혀 없더라도 염려할 필요는 없다. 우선 앱 개발을 시 작하는 데 필요한 환경 설정을 한 다음, Xcode와 Swift를 사용해서 프로젝트 생성 방법을 찬 찬히 알려줄 것이다. Swift는 애플의 새로운 프로그래밍 언어이며, 스크립트 언어처럼 쉽고 빠르게 사용하도록 설 계되었다. 또한, 컴파일 언어처럼 성능이 뛰어나다. Swift를 배우고 앱을 개발하려면 우선 우리의 컴퓨터에 개발 소프트웨어인 Xcode(6.0 버전 이 상)가 준비되어야 한다. Xcode는 OS X와 ios 소프트웨어 개발을 위해 애플에서 제공하는 IDE(Integrated Development Environment, 통합 개발 환경)다. IDE 프로그래머가 소프트웨어를 개발할 때 사용하는 여러 도구를 묶어서 제공하는 통합 소프트웨어가 IDE다. 1.1 Swift 개요 1

IDE는 소프트웨어 개발을 훨씬 쉽고 빠르게 해주는 다양한 기능과 유틸리티를 제공한다. Swift를 배우는 동안에 Xcode IDE의 기본적인 기능들이 어떻게 사용되는지 알게 될 것이다. Swift는 2014년에 소개된 애플의 새로운 프로그래밍 언어로서 Xcode IDE에 통합되어 있으며, ios와 OS X 앱을 신속하게 개발할 수 있도록 해준다. Swift를 실행하려면 최소한 OS X 10.9.4 Mavericks(매버릭스) 이상의 버전이 필요하다. 그리고 최신 버전의 Xcode를 사용할 때는 OS X 도 최신 버전으로 설치할 필요가 있다(예를 들어, Xcode 6.4의 경우는 10.10 Yosemite(요세미티)). 최신 버전의 OS X 업그레이드는 앱 스토어에서 무료 로 다운로드 및 설치가 가능하다. 그리고 OS X 업그레 이드가 설치되면 Xcode를 설치할 준비가 된 것이다. 맥 컴퓨터에 Xcode를 설치하는 것은 간단하다. (만일 맥(Mac)이 아닌 PC를 사용 중이라 면, 맥 가상 머신(Mac Virtual Machine) 을 사용하거나 또는 macincloud.com에 서 시간당 1달러에 가상 맥 서버를 임대 하여 사용할 수 있다.) 최신 버전의 개발 도구와 SDK 다운로드 그림 1-1 Xcode는 애플 개발자 사이트에서 쉽게 찾을 수 있다. 최신 버전의 Xcode는 https://developer.apple.com에서 다운로드할 수 있다. 여기에 접속하 면 웹 페이지의 중간쯤에 Download the latest development tools and SDKs 가 있다. 이곳의 Xcode 아이콘을 클릭하면 Xcode 다운로드 페이지 가 나타난다. 거기에서 제일 위에 있는 공개된 최신 버전의 View in the Mac App Store 링크를 클릭하여 맥 앱 스토어의 Xcode 화 면으로 이동한 후 무료로 다운로드와 설치를 할 수 있다. 이때 최신 버전의 OS X 애플리케이 션 개발용 SDK와 ios 앱 개발용 SDK가 함께 다운로드 및 설치된다. Xcode를 설치하고 실행시키면 웰컴 스크린이 나타나며, Get started with a playground, Create a new Xcode project, Check out an existing project 와 같은 세 가지 옵션을 선택할 수 있다. 지 2 Chapter 01 시작하기

금 우리는 Xcode playground(플레이그라운드)를 사용할 것이므로 첫 번째 옵션을 선택하자. Xcode playground는 Xcode(버전 6)에 새로 추가된 기능이다. 이 기능을 사용하면 Swift 소스 코드를 컴파일하지 않고 작성하면서 곧바로 테스트할 수 있다. Playground는 운동장이나 놀 이터를 말하는데, 즐겁고 재미있게 Swift 코드를 작성하고 배우자는 취지에서 이런 명칭을 붙 인 것이라 여겨진다. Get started with a playground 를 선택하면 곧바로 Xcode playground 프 로젝트를 생성할 수 있으며, 처음에는 Name 과 Platform 필드가 나타난다. Name 은 새로 운 프로젝트 파일명이며, 우리가 원하는 것을 입력하면 된다. 여기서는 helloworld 를 사용할 것이다. Platform 은 개발할 프로그램의 플랫폼이며, ios나 OS X 중 하나를 선택한다. 지금 은 Swift와 Xcode가 제대로 설치되어 잘 동작하는지만 테스트할 것이므로 어떤 것을 선택해 도 관계는 없으나, 여기서는 OS X을 선택할 것이다. 그림 1-2 새로운 Xcode playground를 생성하는 옵션들 파일명 입력과 플랫폼 선택이 끝난 후에는 생성된 파일을 저장할 위치를 지정한다. 모든 지정 이 끝난 후 Create 버튼을 누르면 자동 생성된 코드들을 갖는 템플릿 코드가 화면에 나타난 다. 여기서는 일단 그 코드들을 삭제하자. 단, import Cocoa 문은 삭제하지 말고 그대로 둔다. 화면을 보면 대부분의 영역을 텍스트 편집기가 차지할 것이다. 우리가 코드를 작성하면서 대 부분의 일을 하는 곳이 바로 여기다. 텍스트 편집기의 오른쪽 패널에는 사이드바(sidebar)가 있 1.1 Swift 개요 3

는데, 우리가 소스 코드 문장을 하나씩 작성할 때마다 그 코드의 변수가 갖는 현재 값을 곧바 로 사이드바에 보여준다. 바로 이것이 Xcode playground의 편리한 기능이다. 예를 들어, 자동 생성된 템플릿 코드에는 Hello, playground 를 값으로 갖는 str 이라는 변수가 다음과 같이 선언되어 있다. 이 경우 해당 값이 사이드바에 즉시 나타난다. var str = "Hello, playground" 현재 나타난 코드에 이어서 다음 코드를 텍스트 편집기에 입력해보자. var sum = 5 + 7 이 코드가 실행된 결과인 12 가 사이드바에 나타날 것이다. 이런 식으로 그 시점의 변수 값 을 바로 확인할 수 있으므로 코드에 문제가 있을 때 도움을 받을 수 있다. 그림 1-3 Xcode의 사이드바에서는 개발 중인 코드의 변수 값을 알려준다. 이쯤 해서 컴퓨터 프로그래밍의 중요한 개념인 (variable)에 대해 알아보자. 변 수는 프로그램에서 사용할 필요가 있는 값을 저장하는 데 사용된다. 예를 들어, 조금 전에 str 이라는 변수를 생성하고 값으로 Hello, playground 를 지정했었다. 변수 기본적으로 str 은 값으로, Hello, playground 가 저장된 스토리지 영역을 나타낸다. 그리고 이 값은 프로그램이 실행되는 동안 변경될 수 있다. Swift에서는 변수를 생성할 때 특별한 키워드인 var 을 사용하며, 변수명 앞에 넣어서 그 변 4 Chapter 01 시작하기

수를 생성하도록 지시한다. 여기서는 변수명을 str 로 주었으며, (assignment operator)를 사용해서 값을 지정하였다. 대입 연산자 대입 연산자 는 등호(=)를 사용하며, 연산자 오른쪽의 값을 왼쪽의 변수에 대입(지정)한다는 것을 나타낸 다. 여기서는 Hello, playground 값을 str 에 지정하였다. Swift 프로그래밍 언어에서 사용되는 변수에는 여러 타입이 있다. 그중 기본 데이터 타입에는 Int, Float, Double, Character, String, Boolean이 있다. Int 또는 Integer는 소수부가 없는 정수의 변수 타입이다. 예를 들면, 12, 58, -522 등이다. Float와 Double은 소수부를 갖는 숫자들로, 3.14159...의 값을 갖는 파이(Pi, 원주 율)가 가장 좋은 예다. Float와 Double은 크기와 정밀도에서 차이가 있다. Float는 32비트 크기인 반면에 Double은 64비트이므로 소수점 이하 자릿수가 더 많아 서 정밀도가 높아진다. Integer Float Double Boolean 변수는 True 또는 False 값만을 갖는 변수 타입이다(키워드는 Bool). Character 변수는 문자, 숫자, 구두점과 같은 하나의 유니코드 문자를 나 타낸다. Boolean Character 끝으로 String은 앞에 나왔던 Hello, playground 와 같은 문자열이다. String Swift에서는 생성될 변수 값을 검사하여 변수의 타입을 동적으로 결정해준다. Hello, playground 값은 String이므로 그 값을 갖는 str 변수를 지정하면 그 변수의 타입을 Swift가 String으로 선언해준다. 이와는 달리 변수의 타입을 우리가 선언할 수도 있다. 예를 들어, 42 를 Int 타입으로 선언하거나 42.0 을 Float나 Double 타입으로 선언할 수 있다. 앞에서 생성했던 sum 변수에는 5 + 7 을 값으로 지정하였다. 이때는 산술 연산 결과가 변 수의 값이 되고 타입을 결정한다. 대입 연산자의 경우는 연산자 오른쪽이 먼저 처리된 후, 그 결과가 왼쪽의 변수에 지정된다는 것을 기억하자. (arithmetic operator)는 수식을 계산하게 해주며, 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈 (/), 나머지 연산(%)을 할 수 있다. 1.1 Swift 개요 5

이제 다시 우리의 첫 번째 프로그램으로 돌아가자. import Cocoa 라인만 남겨두고 텍스트 편집기의 모든 코드를 지웠는지 확인한다. Cocoa 가 Swift 코드를 OS X에 연결하여 실행되도 록 해주는 라이브러리이기 때문에 import Cocoa 는 필요하다. 여기서는 우선 Hello World 를 출력하는 프로그램을 생성할 것이다. 이것은 새로운 언어를 배울 때 제일 먼저 작성하는 프로그램이기도 하다. 텍스트 편집기에서 우선 println() 을 입력한다. 이때, 우리가 입력하는 단 어와 연관하여 도움이 될 수 있는 코드를 Xcode가 보여줄 것이다. println( ) 그림 1-4 Xcode는 유용한 코드와 그 정보를 제공한다. 여기서는 우리가 printl 을 입력할 때 Xcode에서 println() 함수의 정보를 제공한다. 맨 앞의 소문자 f 는 println()이 함수임을 알려주며, 그 다음의 Void 는 결과를 반환하지 않는다는 것을 나타낸다. 이때 enter 키를 누르면 Xcode가 자동으로 println() 을 완성해준다. (function)는 뒤에서 자세히 설명하겠지만, 간단히 말해서 특정 작업을 수행 하는 독립된 코드 모음이다. println() 함수의 경우는 void를 반환하는데, 이것 함수 은 함수의 실행이 끝난 후 어떤 결과도 반환하지 않음을 의미한다. 예를 들어, 숫자를 더하는 addnumbers() 라는 함수가 있다고 가정한 후, 콘솔에 텍스트를 출력하는 println() 함수와 비교해보자. println() 함수는 한 라인의 텍스트를 출력하고 실행이 끝나지만, addnumbers() 함수는 더해진 숫자를 결과로 반환할 필요가 있다. 이때는 void 대신 반환하는 데이터 타입이 필요하다. 그 다음에는 출력할 Hello World 를 println()의 괄호 안에 입력하면 코드 작성이 끝난다. 6 Chapter 01 시작하기

println("hello World") 여기서는 println() 함수에 Hello World 를 전달하여 출력하게 한다. 그러나 앞에서 얘기했던addNumbers() 함수의 경우는 다 음과 같이 코드를 작성할 수 있다. 다른 언어와 달리 Swift에 서는 문장의 끝을 나타내 는 세미콜론(;)이 필요 없다. addnumbers(1,2) 이 경우는 덧셈할 값들을 함수에 전달한다. 두 함수 모두 개념은 동일하 다. 즉, 함수에 매개변수를 전달하는 것이다. (parameter)는 함수 매개변수 가 작업하는 데 사용하는 값이다. 만일 Hello World 를 println() 함수에 전달하지 않았다면, println()에서 아무것도 출력할 수 없었을 것이다. 마찬가지로 1,2 를 addnumbers() 함수에 전 달하지 않았다면 addnumbers()에서는 무엇을 더할지 몰랐을 것이다. Xcode 6.2 버전부터는 println("hello World")과 같은 함수의 실행 결과가 오른쪽의 사이드바에 나타난다. 그러나 루프문을 포함해서 여러 가지 다른 형태의 코드 실행 결과를 제대로 보려면 프로그램을 실행시켜야 한다. Xcode에서 프로그램을 실행하려면 메뉴의 View Assistant Editor Show Assistant Editor 를 선택한다. 그러면 Console Output 창이 나타난다. 그리고 거기에서 우리 함수의 출력 결과인 Hello World 를 볼 수 있다. Console Output 창에서는 프로그램의 실행 결과 를 보여준다. 현재의 코드 밑에 Welcome to Swift 를 출력하는 코드를 추가해보자. 코드를 추가하는 즉시 Console Output 창에 그 결과가 나타날 것이다. 그리고 2 + 7 과 같은 산술식을 println() 함 수에 전달하는 것도 가능하다. 이때는 연산된 결과가 Console Output 창에 곧바로 나타난다. println("hello World") println("welcome to Swift") println(2 + 7) 1.1 Swift 개요 7

그림 1-5 Console Output 창에서는 우리 코드의 실행 결과를 보여준다. Xcode에서 첫 번째 Swift 프로그램을 작성해낸 것을 축하한다! 8 Chapter 01 시작하기

복습 문제 1. IDE의 의미는? a. Interactive Design Edition b. Integrated Development Environment c. Ironically Detached Existentialist e. Internet Development Engineering 2. 사이드바에서 해주는 일은? a. 프로그램의 출력을 보여준다. b. 변수의 값을 보여준다. c. 삭제했던 코드를 보여준다. d. 잘못된 코드를 제거한다. 3. Swift로 Int 변수를 정의하는 방법은? a. 타입을 선언하고 값을 지정한다: int a = 5 b. 변수와 타입을 선언한다: var int a; c. 변수를 선언하면서 값을 지정한다: var a = 5 d. 변수와 타입을 선언하면서 값을 지정한다: var int a = 5 4. 다음 중에서 Swift 변수 타입이 아닌 것은? a. Int b. Bool c. Long d. Double 1.1 Swift 개요 9

1.2 Xcode IDE 사용하기 Xcode IDE는 앞에서 사용했던 playground 외에도 훨씬 더 많은 기능을 갖고 있다. 또한, 우리 가 아이폰(iPhone), 아이패드(iPad), OS X 프로그램을 개발할 수 있게 해주는 완벽한 개발 환경 을 제공한다. 앞에서 보았던 Xcode 웰컴 스크린의 세 가지 옵션 중에서 이번에는 Create a new Xcode Project 를 선택하자. Playground에서는 프로젝트 이름과 플랫폼 옵션만 있었으나, 여기서는 Xcode의 다양한 기능을 보게 될 것이다. 다음 화면에서는 새로운 프로젝트에 사용할 템플릿(template)을 선택한다(그림 1-6). 템플릿은 우리 앱의 시작점을 제공하고, 우리가 필요한 기본적인 파일들을 자동으로 생성해준다. 템플 릿은 크게 ios와 OS X의 두 가지 용도로 분류되며, 여러 유형의 앱이나 코드를 작성할 수 있 는 다양한 템플릿들이 제공된다. 그림 1-6 Xcode의 템플릿을 사용해서 새로운 프로젝트를 신속하게 설정하고 작업할 수 있다. 지금은 ios Application 탭을 선택하고 Single View Application 을 클릭하자. 이것은 가장 간 단한 애플리케이션 타입이며, Xcode의 진보된 기능을 사용할 수 있는 틀을 제공한다. 10 Chapter 01 시작하기

우리가 작업할 템플릿을 선택하면 그림 1-7과 같이 여러 개의 입력 필드가 있는 또 다른 화면 이 나타날 것이다. 그림 1-7 Xcode에서 우리의 첫 번째 아이폰 앱 설정하기 Product Name 에는 앱의 이름을 입력하고, Organization Name 에는 회사(조직) 이름을 입력하면 되므로 무척 간단하다. 그러나 Organization Identifier 는 뭘까 이것은 우리 앱 의 고유 식별자를 나타내며, 일반적으로 URL을 거꾸로 하여 사용한다. 예를 들어, URL이 LearnToProgram.tv라면 거꾸로 된 URL은 tv.learntoprogram이 된다. 또한, 필요하다면 제 일 끝에 또 다른 식별자를 추가하면 된다. 여기서는 그냥 sample 을 추가하였다. 따라서 Organization Identifier는 tv.learntoprogram.sample 이 된다. 그리고 바로 밑에 있는 Bundle Identifier 는 우리가 입력한 Organization Identifier에 Product Name이 추가되어 자동으로 생 성된다. 따라서 하나의 Organization Identifier에 여러 개의 product를 구성할 수 있다. 그 다음에는 프로그래밍 언어를 선택한다. 여기서는 Swift를 선택할 것이다. 마지막으로 앱 이 실행될 장치를 선택한다. 앞의 템플릿 선택 시에 이미 ios를 선택했으므로 iphone(아이폰), 1.2 Xcode IDE 사용하기 11

ipad(아이패드) 중 하나를 선택할 수 있다. 지금은 그냥 iphone(아이폰)만 선택할 것이다. 그리 고 Next 버튼을 누른 후 프로젝트를 저장할 위치를 지정한다. 각자 편한 곳을 지정하면 된다. 그림 1-8 Xcode 메인 화면. 왼쪽에서는 우리 프로젝트의 파일들을 볼 수 있고, 중앙에는 메인 창(작업 영역)이 있으며, 오른쪽에는 속성과 도구상자가 있다. 모든 지정이 끝나면 프로젝트가 로드되고 Xcode IDE의 메인 화면이 나타난다(그림 1-8). 중앙 의 메인 창 위쪽을 보면 여러 관점에서 프로젝트를 액세스할 수 있는 옵션들이 존재한다(그림 1-9). 그림 1-9 Xcode는 프로젝트 옵션들의 빠른 액세스를 제공한다. General 옵션에서는 프로젝트의 기본 정보를 보여주며, 앱이 실행될 장치와 론칭 아이콘/이 미지 같은 것을 포함한다. 그 다음에 있는 Capabilities 옵션에서는 특정 기능을 사용하기 위 해 설정 또는 취소될 수 있는 모듈들을 액세스할 수 있게 해준다. 예를 들어, 게임 센터나 인 12 Chapter 01 시작하기

앱(In-App) 구입 등이다. Info 옵션에서는 키/값의 형태로 프로젝트의 일반 정보를 제공한 다. Build Settings, Build Phases, Build Rules 옵션들은 프로젝트를 컴파일하는 데 영향 을 주는 내용들이며, 지금은 신경 쓰지 않아도 되는 것들이다. 지금까지 설명한 이런 옵션들은 앱을 개발하면서 변경할 수 있다. 예를 들어, 앱의 화면 레이 아웃에 맞춰 General 옵션의 장치 방향(가로 또는 세로)을 선택할 수 있다. 메인 창의 왼쪽에 있는 디렉터리 트리에서는 앱에서 사용되는 파일들을 보여준다. 이 파일들 은 우리가 선택한 템플릿을 기준으로 생성된 것이며, 앱을 실행하는 데 꼭 필요한 것들이다. 이 부분을 확대해보면 그림 1-10과 같다. 그림 1-10 우리 프로젝트에서 사용되는 파일들이 미리 준비되어 있다. 여기에는.swift 확장자를 갖는 AppDelegate.swift 와 ViewController.swift 라는 두 개의 파 일이 있다. 첫 번째 파일인 AppDelegate.swift 는 애플리케이션의 동작을 모니터링하는 애플 리케이션 델리게이트(Application Delegate) 역할을 하는 것으로서, 이 파일을 열어보면 Hello World 보다 조금 더 복잡한 Swift 코드를 볼 수 있을 것이다. 그러나 지금은 이 코드에 신경 쓰지 말자. 우리의 앱이 실행되면서 다양한 상태를 거치는 동안에 반응할 일을 하는 코드들 이다. 그중 하나의 예를 살펴보면 다음과 같다. 1.2 Xcode IDE 사용하기 13

func applicationdidenterbackground (...) 이 함수 코드에서는 사용자가 우리의 앱에 더 이상 관심을 두지 않을 때 할 일을 처리한다. 예를 들어 사용자가 우리 앱을 사용하다가 전화를 받으면 전화 앱의 화면을 보게 되고, 이때 우리의 앱은 백그라운드(background) 상태가 된다. 바로 이때, 이 함수에 작성한 코드가 실행 된다. 다른 파일인 ViewController.swift 는 뷰 컨트롤러(View Controller)의 역할을 하는 것으로서 사 용자가 보는 특정 화면이나 뷰를 제어한다. 지금은 거기에 두 개의 함수가 있으며, 둘 다 맨 앞에 override 키워드를 갖고 있다. 이것 역시 지금은 신경 쓸 필요가 없으나, 이 함수들은 애플리케이션이 로드될 때 사용자에게 보여지는 뷰를 어떻게 할 것인지 결정하는 데 도움을 준다는 것만은 알아두자. 이 함수들의 코드에 있는 주석을 보면 목적을 알 수 있을 것이다. 프로그램을 작성할 때는 (comment)을 잘 넣는 것이 중요하다. 주석은 코드에 텍스트 형태로 추가되며, 컴파일러는 코드를 컴파일할 때 주석을 신경 쓰지 않고 주석 무시한다. 따라서 주석을 잘 활용하면 특정 코드에서 무슨 일을 하는지, 그리고 여러 부분의 코드가 어떻게 상호 작용하는지를 파악하는 데 도움이 된다. 프로젝트 규모가 점점 커지면 특정 코드를 왜 작성했었는지 모르게 될 경우가 있다. 또한, 내 가 작성한 코드로 다른 사람이 같이 작업할 때(또는 도움을 구할 때)는 다른 사람이 나의 의도 를 쉽게 파악할 수 있기 때문에 주석이 잘 작성된 코드는 굉장히 유용하다. Swift에서는 한 라 인의 주석을 나타낼 때 다음과 같이 두 개의 역 슬래시를 사용한다. // 이것은 주석이다! println("this is code!") 또는 /* 와 */ 사이에 여러 라인에 걸치는 주석을 넣을 수 있다. 14 Chapter 01 시작하기

println("this is code!") /* 이것은 여러 라인에 걸치는 주석이다! */ 그림 1-11 주석은 코드가 하는 일을 나타내는 데 도움을 준다. 여기서는 자동으로 생성된 함수에서 할 일을 설 명한다. 그림 1-11의 뷰 컨트롤러 코드에 있는 주석이 무슨 의미인지 모르더라도 염려할 필요는 없다. 여기서는 코드 작성 시에 주석이 중요하다는 것만 알면 된다. 그 다음으로 프로젝트에서 알아둘 파일은 Main.storyboard 다. 이것은 우리 애플리케이션의 메인 스토리보드(main storyboard) 역할을 하며, 여기에는 (화면에 보여지는) 앱의 시각적인 요소 인 뷰들의 레이아웃을 정의할 수 있다. ViewController.swift 파일에서 코드로 할 수도 있지만, Xcode에서는 레이아웃을 빠르고 쉽게 만들 수 있는 도구들을 별도로 제공한다. 이것을 어떻 게 사용하는지 보여주기 위해 여기서는 또 다른 Hello World 앱을 만들 것이다. 오른쪽 패널 밑에는 아이콘과 설명이 적힌 버튼이 있다. 이것이 바로 도구상자(toolbox)로, 제 일 위에 일렬로 된 아이콘들이 있다(그림 1-12의 화살표 참조). 왼쪽에서 세 번째 아이콘을 선 택한 후 그 밑에 Label 부분이 나타날 때까지 내려가보자(그림 1-13). 그 다음에 라벨(Label) 을 마우스로 끌어서 왼쪽의 메인 스토리보드 화면 영역에 놓으면 된다. 이때 나타나는 메시지 를 참조하여 화면의 정중앙에 위치시키자. 다 되었으면 해당 라벨을 더블클릭하여 텍스트를 Hello World 로 변경하면 모두 완료된 것이다. 1.2 Xcode IDE 사용하기 15

그림 1-12 메인 스토리보드 레이아웃에서는 우리 앱의 뷰들을 마우스로 드래그 앤드 드롭하여 배치하고 편집 할 수 있다. 그림 1-13 도구상자에는 라벨을 포함해서 여러 유용한 뷰 요소가 많다. Xcode의 또 다른 중요한 기능으로 우리가 보고자 하는 패널들을 변경하는 기능이 있다. 오른 쪽 패널의 위에는 여섯 개의 아이콘이 있는데, 이것들은 우리의 작업 영역을 구성할 수 있게 해준다(그림 1-14). 디폴트로 선택되는 제일 왼쪽의 아이콘은 우리가 작업하고 있는 파일이 메 16 Chapter 01 시작하기

인 창 영역 전체를 사용할 수 있게 한다. 이어서 왼쪽에서 두 번째 아이콘을 클릭하면 보조 편 집기(assistant editor)가 나타난다. 이것은 메인 스토리보드의 레이아웃과 그것을 지원하는 코드 를 함께 보여준다(그림 1-15). 그리고 그 다음 아이콘은 메인 스토리보드의 레이아웃을 그래픽 이 아닌 XML로 보여준다. 그림 1-14 Xcode에서는 오른쪽 위의 버튼들을 사용해서 우리가 보고자 하는 패널들을 변경할 수 있다. 그림 1-15 이것은 Xcode에서 원하는 패널을 보는 하나의 예다. 왼쪽에는 메인 스토리보드가 나타나고, 그 다음 에는 그것을 지원하는 코드가 보여진다. 오른쪽의 나머지 세 아이콘은 패널을 볼 수 있는 방향을 선택한다. 순서대로 왼쪽, 아래, 오 른쪽이다. 오른쪽 패널에는 속성(property)과 컨트롤(control)들을 볼 수 있는 더 많은 버튼이 존재한다. 1.2 Xcode IDE 사용하기 17

Hello World 라벨을 선택한 후 오른쪽 패널의 우측부터 세 번째 버튼을 클릭하면 해당 라벨 의 속성을 볼 수 있으며(그림 1-16), 폰트 스타일과 크기 등을 변경할 수 있다. 따라서 그 옵션 들을 사용하면 별도의 코드 작성 없이 여러 속성의 구성이 가능하다. 그림 1-16 이것들은 코드 작성 없이 Xcode에서 직접 변경 가능한 속성들이다. 따라서 우리 앱의 레이아웃을 쉽 고 빠르게 수정할 수 있다. 라벨 속성 밑에는 도구상자가 있다. 도구상자에는 라벨 외에도 사전 정의된 컨트롤과 제스처 (gesture)들이 많다. 따라서 우리의 앱에 버튼(button)도 간단하게 추가할 수 있다. 도구상자의 버튼을 마우스로 선택한 후 레이아웃에 끌어다 놓고 이름을 변경하고서 버튼과 관련된 코드 를 작성하면 된다. 또는 도구상자를 사용하지 않고 코드로 버튼을 생성할 때는 코드를 뷰 컨 트롤러(ViewController.swift)에 직접 작성하면 된다. 18 Chapter 01 시작하기

Hello World 라벨을 갖는 간단한 레이아웃을 만들었으므로 이것이 실제로 어떻게 보이는지 알고 싶을 것이다. 이것은 앞의 예에서처럼 콘솔로 출력되지 않는다. 설사 출력된다고 해도 그 래픽 사용자 인터페이스(GUI)를 사용하는 아이폰 앱의 경우는 그닥 달갑지가 않다. 이는 콘 솔을 볼 일이 거의 없기 때문이다. Xcode는 이것에 대한 해결책을 가졌는데, 메뉴의 Product Run을 선택하면 우리 프로그램 이 앱으로 빌드되는 것을 볼 수 있다. 그리고 잠시 후에 아이폰 시뮬레이터가 나타나서 생성 한 애플리케이션 화면을 보여줄 것이다. 지금은 이 앱에서 하는 일이 별로 없으므로 이만 중 단시키자. 그렇더라도 아이폰 시뮬레이터는 여전히 실행되고 있을 것이다. 이처럼 Xcode에서 는 개발한 아이폰 앱을 실제 장치에 설치하지 않더라도 시뮬레이터를 사용해서 아이폰 앱을 생성하고 실행해볼 수 있다. 1.2 Xcode IDE 사용하기 19

복습 문제 1. 다음 중 코드에 주석을 잘 사용한 것은? a. 코드에서 하는 모든 일을 자세하게 나타낸다. b. 향후에 코드를 참조할 때 분명하게 알 수 있도록 기록한다. c. 목록으로 만든다. d. 코드만 보면 알 수 있으므로 주석을 사용하지 않는다. 2. Swift 템플릿에서 제공하는 것은? 해당되는 것을 모두 고르시오 a. 프로젝트 이름 b. 특정 프로젝트 타입으로 작업하는 데 필요한 기본 파일들 c. 우리가 수정할 수 있는 샘플 앱 스토어 페이지 d. 신속하게 개발할 수 있도록 기반 코드 제공 3. Organization Identifier를 만들 때 URL을 거꾸로 하여 사용하는 이유는? a. URL이 좋은 것이므로 b. 제품을 홍보하기 위해서 c. 우리 앱을 구글에 전시하기 위해서 d. 고유하게 만들기 위해서 4. 개발 중인 아이폰 앱을 Xcode에서는 어떻게 실행하는가? a. 아이폰 시뮬레이터를 론칭하여 우리 앱을 실행한다. b. 결과를 콘솔에 출력한다. c. 우리 앱을 애플 앱 스토어에 전송한다. d. 우리 앱을 OS X용으로 컴파일하여 실행한다. 20 Chapter 01 시작하기

1. 최신 버전의 Xcode를 설치하여 개발 환경을 준비한다. SLA_Lab1이 라는 이름으로 새로운 playground 프로젝트를 생성한다. 2. 텍스트 편집기에서 불필요한 코드를 모두 삭제한다. 단, import 문은 그대로 둔다. 1장 연습 문제 3. 개발자 이름, 일자, 프로젝트 이름(SLA_Lab1)을 설명하는 여러 라인에 걸치는 주석을 추가한다. 4. println() 문을 사용해서 이름과 주소를 출력한다. 이 내용들은 println() 문의 문자열 인자로 전 달되어야 한다. 5. println() 문을 사용해서 다음 수식의 결과를 출력한다. 27 * 82 541.33-61.888 999 / 540 6. 보조 편집기(assistant editor)를 열어서 콘솔 창이 나오게 한 후 출력되는 결과가 맞는지 확인 한다. 1장 요약 이 장에서는 콘솔로 결과를 출력하는 간단한 프로그램을 작성해보고 Xcode의 중요한 기능 도 간략히 알아보았다. 다음 장부터는 이 장에서 잠깐 살펴보았던 변수, 산술 연산자와 더불 어 타입 변환(typecasting)과 같은 프로그래밍의 기본적인 사항들에 관해서 더 자세하게 알아 볼 것이다. 1.2 Xcode IDE 사용하기 21

02 이 장에서 배울 내용 변수 변수(variable)를 이해한다. 변수를 선언하고 값을 지정하는 방법을 배운다. 변수와 상수(constant)의 차이점을 이해한다. 산술 연산자가 무엇이고 어떻게 동작하는지 배운다. 변수 사용시 타입 변환(typecasting)을 사용하는 방법을 배운다. Swift의 문자열 삽입(string interpolation)을 이해한다. 2.1 변수와 상수 생성하기 여기서는 변수와 상수에 관해 더 자세히 배울 것이다. 그리고 이 두 가지 중요한 개념을 생성 하고 사용하는 방법을 잘 이해하기 위해 Xcode playground로 실습한다. 우선 1장에서 한 것처럼 Xcode playground를 실행시키자. 그리고 프로젝트 이름에는 VarsAndCons 를 입력한다. 프로젝트 이름(파일명)은 분명하고 알기 쉬운 방법으로 짓는 습 관을 기르는 것이 좋다. 이것에 관해서는 변수 생성 시에 더 자세히 얘기할 것이다. 알아 두자 프로젝트 이름인 VarsAndCons처럼 대문자를 사용하는 이름 규칙을 카멜 케이싱(camel casing)이 라 하며, 프로그래밍에서 흔히 사용된다. 카멜 케이싱에서는 복합 단어를 읽고 이해하기 쉽도록 각 단어의 첫 번째 문자를 대문자로 한다. 그리고 맨 앞 문자는 경우에 따라 소문자(변수 이름 등) 또는 대문자(클 래스 이름 등)를 사용한다. 예를 들어, numberofobjects 의 카멜 케이스는 numberofobjects 가 된다. 낙타의 혹처럼 중간에 대문자가 들어 있다고 해서 카멜 케이스라고 일컫는다. 2.1 Xcode IDE 사용하기 23

그 다음에 그림 2-1처럼 OS X 애플리케이션을 선택하자. 그리고 생성된 파일을 저장할 위치 를 지정하면 자동 생성된 코드들을 갖는 템플릿 코드가 화면에 나타난다. 1장에서 했던 것처 럼 import Cocoa 문만 그대로 두고 나머지 코드들은 삭제하자. 그림 2-1 OS X 앱 개발 플랫폼 선택하기 여기서는 1장에서 간략히 알아본 변수에 대해서 더 자세히 살펴볼 것이다. 변수는 우리가 저장 하고자 하는 값이 위치한 컴퓨터 메모리 영역의 참조다. 변수를 초기화할 때는 특정 크기의 메 모리 영역을 생성하고 거기에 값을 저장하도록 컴파일러에게 지시한다. 실제 차지하는 메모리 양은 변수의 타입에 따라 달라진다. 변수 타입에 대해서는 조만간 더 자세히 알아볼 것이다. 자, 그러면 변수를 생성해보자. Playground에서 다음 코드를 입력한다. var numofstudents = 10 여기서는 키워드인 var 을 사용해서 변수를 생성한 후 그것의 이름을 numofstudents 로 지 어주었다. 그리고 대입 연산자인 = 을 사용하여 그 변수에 지정하고자 하는 값이 10 임을 알 려준다. 여기서 변수의 이름을 numofstudents 로 지어주었음에 주목하자. 이처럼 읽고 이해하기 쉬 운 이름을 사용하는 습관을 갖는 것이 중요한데, 학생(student)들의 인원 수(number of)를 갖는 변수임을 분명히 알 수 있기 때문이다. 이 변수의 이름을 numstu 로 할 수도 있었으나 그럴 경우 다른 사람들이 보기에 Stu라는 이름을 갖는 사람들의 인원 수 또는 그 밖의 다른 것으로 오해할 수도 있다. 24 Chapter 02 변수

또한, 변수 이름을 소문자로 시작하고 그 다음부터는 카멜 케이싱을 사용했다는 것에 주목하 자. Swift 언어에서는 이와 같은 대소문자 구분을 요구하지는 않지만, 프로그래머가 이러한 표 준 이름 규칙을 계속해서 지켜주는 것이 좋다. 즉, 변수 이름의 첫 자는 소문자로 시작하고, 이 책 6장에서 배울 클래스의 경우는 대문자로 시작한다. 그림 2-2 변수 선언 예 변수 라고 부르는 이유는 그 값이 가변적이기 때문이다. 따라서 언제든지 우리가 원하는 값 으로 변경할 수 있다. 그러나 때로는 변수의 값을 변경할 수 없도록 할 필요가 있는데, 이때는 상수를 사용한다. (constant)는 변수와 유사하다. 그러나 상수의 값은 프로그램이 실행되는 동 안 변함이 없다. Playground에서 앞의 변수 선언 밑에 다음 내용을 입력해보자. 상수 let Pi = 3.1415 키워드인 let을 사용하면 변수가 아닌 상수를 생성한다. 여기서 상수의 이름은 Pi 이며, 대입 연산자를 사용해서 3.1415 를 Pi의 값으로 지정한다. Pi 값은 수 학적으로 절대 변하지 않으므로 우리 프로그램에서도 이 값을 변경할 이유는 없다. 이처럼 Pi를 상수로 지정하면, 그 값이 필요할 때는 언제든지 사용할 수 있다. 예를 들 어, 원의 면적을 결정하는 함수와 같은 경우다. 2.1 Xcode IDE 사용하기 25

그림 2-3 Pi 는 상수로 선언되었고 numofstudents 는 변수로 선언되었다. 지금까지 우리가 배운 것을 테스트하기 위해 다음 코드를 입력하면서 어떤 일이 생기는지 알 아보자. numofstudents = 5 우선, 변수 이름을 입력하는 동안 코드의 완성에 도움을 주는 팝업이 나타난다(그림 2-4). numofstudents 는 우리가 선언했던 변수라는 것을 Xcode가 알기 때문에 보여주는 것이 다. var 은 변수를 최초 선언할 때만 사용하기 때문에 여기서는 키워드인 var 을 사용하 지 않았다. 그리고 일단 변수가 생성되면 그 이름으로 참조만 할 수 있다. 변수 이름 다음 에는 대입 연산자와 지정할 값을 입력하면 된다. 그리고 이때, 오른쪽의 사이드바에서는 numofstudents 의 값이 초깃값인 10에서 5로 변경된 것을 볼 수 있다. 변수란 것은 가변적이 기 때문에 이것은 당연한 일이다. 그림 2-4 코드 완성 팝업은 변수나 상수 및 자주 사용되는 코드를 빨리 액세스할 수 있게 해준다. 이제는 다음 코드를 입력해보자. Pi = 3.14 26 Chapter 02 변수

이 코드를 입력할 때는 Xcode가 에러를 보여준다. 코드 왼쪽에 빨간색의! 가 나타나고, Pi 에 빨간 밑줄이 나타날 것이다(그림 2-5). 그리고! 를 클릭하면 cannot assign to let value Pi 라는 메시지가 나타나서 어떤 에러인지 알려준다. 이것은 상수의 값을 변경하려고 했다는 메시지다. Pi 는 키워드인 let을 사용해서 상수로 선 언되었기 때문이다. 그림 2-5 Xcode는 에러를 분명하게 알려주려고 하지만, 때로는 에러 메시지가 애매모호한 경우도 있다. 이 경 우는 상수의 값을 변경하려고 했기 때문에 에러가 생긴 것이다. 에러가 생긴 코드 라인을 삭제하고 그 대신에 numofstudents 의 값을 7로 변경하는 코드를 추가해보자. 이제 우리의 코드는 다음과 같이 될 것이다. var numofstudents = 10 let Pi = 3.1415 numofstudents = 5 numofstudents = 7 이 코드가 실행되면 Pi 의 값은 3.1415이고, numofstudents 의 값은 7이 될 것이다. 알아 여기서는 변수와 상수를 사용하기 전에 함께 선언하였다. 이런 식으로 코드를 작성하는 것이 좋은 두자 방법이다. 변수는 사용에 앞서 먼저 선언하자. 그리고 이때 변수 이름을 알기 쉽게 부여하고, 필요 하다면 변수를 사용하는 이유를 주석으로 추가해주자. 1장에서는 Float, Int, String과 같은 서로 다른 타입의 변수들을 설명했었다. Swift에서는 변수 를 선언할 때 그 변수의 타입을 자동으로 결정한다는 것을 기억하고 있을 것이다. 따라서 이 2.1 Xcode IDE 사용하기 27

경우에 numofstudents 는 Int, Pi 는 Double 타입이 된다. 그러나 우리가 변수 타입을 지정 할 수도 있다. Swift가 자동으로 변수 타입을 추론할 때 그 변수는 (implicitly typed)을 갖는다고 한다. 이때 Swift는 그 변수에 지정된 값을 살펴보고 해당 값을 기준으로 타입을 지정한다. 만 일 반드시 우리가 타입을 지정하는 다른 언어를 사용해본 경험이 없다면 이와 같은 암시적 타 입을 선호하게 될 것이다. PHP나 자바 스크립트의 경우에도 암시적 타 입을 지원한다. 이와는 달리 (explicitly typed)을 선택할 수도 있다. 이때는 우리가 변수의 타입을 선언한다. 암시적 타입 선언과 명시적 타입 선언의 예는 다음과 같다. 암시적 타입 명시적 타입 var age = 40 var numofitems:int = 77 변수 age 에는 값으로 40이 지정되고, Swift가 Int 타입으로 추론한다. 반면에 numofitems 는 명시적으로 Int 변수로 선언되었다. 다음 코드를 입력하고 오른쪽 사이드바에 어떻게 나타 나는지 살펴보자. numofitems = 86.6 이때는 에러가 발생한다. numofitems 를 Int 타입으로 선언했기 때문이다. 왼쪽의! 를 클릭 하면 Double 타입의 값을 Int 타입에 지정할 수 없다는 에러 메시지를 볼 수 있다. 28 Chapter 02 변수

그림 2-6 Swift는 Int 변수에 소수점이 있는 값이 지정될 때 Int 타입과 호환되지 않으므로 에러로 처리한다. 숫자가 아닌 다른 값을 갖는 변수의 타입도 명시적으로 지정될 수 있다. 1장에 서 얘기했던 String 변수 타입을 다시 생각해보자. Int 타입처럼 String 타입도 명 시적으로 선언할 수 있다. 예를 들면 다음과 같다. var name:string = "Mark Lassoff" 이 예에서는 name 변수가 항상 String 타입임을 Swift에게 알려주고 있으며, 그 다음에 ""로 둘러 싼 문자열 값을 지정하 고 있다. 변수의 명시적 타입은 반드시 타입을 선언하여 생성하는 C++ 나 자바의 경우와 유사하다. 2.1 Xcode IDE 사용하기 29

복습 문제 1. 카멜 케이스(Camel Case) 란? a. 단어를 모두 대문자로 하는 이름 규칙이다. b. 각 단어의 첫 자를 대문자로 하는 이름 규칙이다. c. 낙타를 운송하는 수단이다. d. 담배 파이프의 속어다. 2. 변수의 타입을 선언할 수 있는 방법은? a. 추론적(inferred) 또는 자동적(automatic) b. 동적(dynamic) 또는 정적(static) c. 암시적(implicit) 또는 명시적(explicit) d. 강제적(forced) 또는 제안적(suggested) 3. 상수로 할 수 없는 것은? a. 선언한다. b. 이름을 부여한다. c. 초깃값을 지정한다. d. 값을 변경한다. 4. 변수의 이름을 지어줄 때 고려해야 하는 것은?(해당되는 것을 모두 고르시오) a. 길이 b. 알기 쉬운지 c. 유용한지 d. 의미를 잘 표현하는지 30 Chapter 02 변수