검색결과 리스트
optionaltype에 해당되는 글 1건
- 2014.10.29 [swift] Swift 기초 - 1 (1)
글
[swift] Swift 기초 - 1
"Swift는 어떤 언어인가? 애플은 왜 Swift 언어를 만들었을까? "
"Objective-C 언어를 대체할 새로운 언어인가? Objective-C 언어는 사라지는건가?"
"그렇게 되기까지 어느 정도의 시간이 걸릴 것인가?"
위 질문들에 답을 찾기 위해 시작한 스터디(총 4강)의 결과물을 공유합니다.
Swift는 iOS, OSX 개발을 위해 애플에서 발표한
멀티 패러타임, 컴파일 프로그래밍 언어입니다.
2014 WWDC에서 처음 소개되었고, 코코아/코코아 터치,
Objective-C 코드와 호환되게 설계되었습니다.
2014 WWDC에서 크레이그 페더릭은 "Objective-C가 없는 C언어"라고 소개하였습니다.
C언어처럼 빠르면서 Objective-C 언어의 생산성과 강력함을 가진 언어!
애플 개발자 Swift 공식 사이트에서는 코드작성이 인터렉티브하고,
재미있고, 혁명적인 새로운 프로그래밍 언어라고 소개합니다.
Swift 단어의 뜻을 아시나요?
제비를 닮은 심볼은 해안과 산지의 바위절벽에 서식하며
여름에 우리나라에 찾아온다는 "칼새"를 의미합니다.
"신속한","빠른" 이라는 뜻도 동시에 가지고 있지요
Swift의 심볼이 정말 칼새와 똑같이 생겼네요.
Swift는 현대 프로그래밍 언어의 장점을 두루 채용한 언어입니다.
주요 스펙은 기존의 서버사이드 병렬 스크립트 swift 언어에서 가져와,
다른 특징들을 결합했다고 합니다.
Swift를 3단어로 표현하면 - SAFE! MORDERN! POWER!
2010년 애플 개발툴 부서 총책임자 "크리스 레트너"에 의해
Swift 프로젝트가 시작되었습니다. 이후 많은 개발자들의 참여로 발전하게 되었고,
오늘에 이르게 되었습니다. Swift의 아버지 = 크리스 레트너?
새롭게 소개된 Xcode6에는 Swift 코드를 인터랙티브하게 실험해볼 수 있는
Playground 라는 템플릿을 포함하고 있습니다.
컨솔출력뿐만 아니라 UI 요소들 또한 바로 확인할 수 있으며
루프문의 값을 기억해 그래프로 그려주기까지 합니다.
코드를 맘껏 가지고 놀 수 있는 놀이터 그 자체입니다.
이제부터 Swift의 문법에 대해서 알아보겠습니다.
가장 기초가 되는 변수와 상수는 어떻게 선언할까요?
변수는 var, 상수는 let 키워드를 사용합니다.
정수,실수,문자열,배열,사전,클래스 등 모든 타입들에 적용되는
일관되면서 심플한 규칙을 따릅니다.
(편리성을 위해 3문자 키워드로 맞추는 섬세함까지!)
Swift의 두드러진 특징 중의 하나로 타입추론을 꼽을 수 있습니다.
타입추론이란 할당되는 값(Value)을 통해 변수의 타입을 예측하는 것을 의미합니다.
똑똑한 컴파일러는 변수에 타입을 명시하지 않아도 할당되는 값을 보고
이 변수가 "Int 혹은 String" 타입으로 예측하고 이후부터 해당타입으로 변수를 취급합니다.
Swift는 유니코드문자를 변수이름으로 사용할 수 있습니다.
이모티콘으로도 변수이름을 지을 수 있으니 재미있을 따름입니다.
"" 쌍타옴표로 감싼 문자열을 String 타입으로 인식합니다.
Objective-C와는 다르게 문자열을 표기하는데 @를 사용하지 않지요.
for-each 구문을 사용해서 문자열(String)을
이루는 문자(Character)를 간편하게 순회할수 있습니다.
스터디를 진행했던 Xcode6 Beta 베타 버전에서는
문자+문자, 문자열+문자 의 접합연산이 가능했는데,
Swift1.0 정식버전에서는 불가능해졌습니다.
배열과 배열, 문자열과 문자열의 접합연산만이 가능다는 점! 주의하세요
포맷팅 문자열은 어떻게 만들까요?
문자열 내부에 \(변수) 구문을 사용해서 원하는 값으로 치환이 가능합니다.
앞서 언급했던 Swift의 간결함 중 한 가지! 기억하나요?
var 키워드를 사용하면 수정 가능한 문자열.
let 키워드를 사용하면 수정 불가능한 문장열을 정의할 수 있습니다.
Array와 Dictionary에 대해서 알아볼까요?
Objective-C의 NSArray, NSDictionary와 대응하는 클래스로, 대괄호[]를 사용하여 선언합니다.
Array는 값의 순서리스트를,
Dictionary는 키:값 쌍으로 초기화 할 수 있습니다.
Objective-C에서는 NSObject를 상속하는 어떤클래스도 포함할 수 있었습니다.
반면 Swift에서는 Array는 동일한 타입의 값들만 포함할 수 있고,
Dictionary는 문자열 키에 동일한 타입의 값들만 포함해야한다는 제약이 추가되었습니다.
일반적인 while과 for 루프문을 사용할 수 있습니다.
루프 조건문에서는 ()를 사용할 수 있지만 일반적으로 사용하지 않는게 관례입니다.
Objective-C에서는 볼수 없었던 Range 루프문입니다.
1...5는 1부터 5를 포함하여 5번의 루프를,
0..<5는 0부터 5를 포함하지 않고 5번의 루프를 반복합니다.
(마치 for 조건문에 i < 5와 i <= 5 를 사용하는 것처럼)
for-each 구문으로 Array를 순회할 수 있습니다.
Dictionary도 아직 배우지 않았지만 튜플을 사용하여 (키,값)쌍으로 순회할 수 있습니다.
Swift의 변수는 디폴트로 nil이 될수 없습니다.
즉 선언과 동시에 반드시 초기화가 이루어져야 하지요.
null 과 같이 아직 값을 갖지 않는 변수가 필요할 때는 어떻할까요?
그래서 필요한 것이 Optional 타입입니다. 변수의 타입 뒤에 ?를 붙여 옵셔널 타입으로
선언하면, 변수는 nil (null)값을 가질 수 있습니다.
"optional 타입" 의 자세한 내용은 다음 강의에서 설명하겠습니다.
Optional로 선언된 변수는 그냥 사용할 수 없습니다.
컴파일 에러에서 벗어나기 위해 optional 타입을 벗겨야(unwrapping) 하는데요
위와 같은 구문을 사용해서 optional 타입을 unwrapping 할 수 있습니다.
"possibleLegCount가 nil 아니면 그 값을 상수 letCount에 할당하고 if 문으로.."
처럼 해석할 수 있습니다. 역시 자세한 설명은 다음 강의에서.
switch 구문입니다. Objective-C와 다른 점을 눈치 채셨나요?
그렇습니다. case 조건안에 ,를 구분으로 여러 값을 명시할 수 있습니다.
또 switch 문에 정수형 외에 다른 타입들도 사용이 가능합니다.
1강 끝~~ 이라고 하기엔 아직 이릅니다. 아래를 보세요.
2014 WWDC 가 진행되면서 앱스토어에
WWDC 세션을 소개하고 안내하는 Swift 최초의 공식앱이 올라왔습니다.
iOS8과 요세미티를 deployment target으로 한 앱은 미래에도 정상작동을 보장합니다.
사실 메버릭스와 iOS7을 타겟으로 해도 동작하는데 그 이유는
앱 번들 안에 경량의 swift 런타임을 포함하기 때문이라고 합니다.
Swift 스펙이 안정화될 즈음에 런타임이 제거될거라 합니다.
바이너리 호환성은 보장되지 않는다고 하니, 앱의 모든 컴포넌트들은
동일한 버전의 Xcode와 Swift 컴파일러를 사용해서 빌드되야 합니다.
Swift의 스펙은 아직도 핫하게 변경되고 있어서 소스코드 수준의 호환성을
보장하지 않습니다. Xcode에서 마이그레이션 할 수 있는 수단을 제공할 계획이라고 합니다.
호환성 문제가 있긴 하지만, Swift가 기존 플랫폼에서도 실행가능한 이유는
Objective-C와 동일한 런타임을 사용하기 때문이라고 하네요
단일 프로그램에서 함께 복합해서 사용할 수도 있구요
브리징 헤더를 제공하면 Objective-C로 작성된 코드를 Swift에서도 손쉽게 사용할 수 있습니다.
Optional 타입은 왜 필요한가? 에 대한 의문이 생깁니다.
컴파일 타입에 확정된 값을 갖지 않는 변수에 사용한다면,
대다수의 변수들이 optional로 선언되어야 할텐데, 왜 굳이 옵셔널 타입이 필요한 걸까요??
자세한 내용은 다음 강의에서!
위 구문은 어떤 결과를 갖을까요?
첫번째 구문은 nil 값을 갖는 상수입니다.
상수이기 떼문에 당연히 값을 변경하고자 하면 에러가 발생하겠지요
아래 구문은 옵셔널 타입이 아니기 때문에 nil을 할당할 수 없습니다.
'Swift' 카테고리의 다른 글
| [swift2] New in Swift2.0 (0) | 2015.06.19 |
|---|---|
| [swift] Apple Swift Blog (0) | 2015.06.10 |
| [swift] Swift 기초 - 4 (0) | 2014.10.29 |
| [swift] Swift 기초 - 3 (1) | 2014.10.29 |
| [swift] Swift 기초 - 2 (0) | 2014.10.29 |
| [swift] Swift 기초 - 1 (1) | 2014.10.29 |
설정
트랙백
댓글
-
파운데이션 2015.01.26 20:14
정말 좋은 글입니다 감사합니다