검색결과 리스트
unwrapping에 해당되는 글 1건
- 2014.10.29 [swift] Swift 기초 - 2
글
[swift] Swift 기초 - 2
Swift 두 번째 스터디입니다.
지난 시간에 학습한 내용을 정리해볼까요?
1. 변수 선언은 var 키워드를, 상수 선언은 let 키워드를 사용합니다.
2. Swift 컴파일러는 변수에 할당되는 값을 통해 타입을 추론합니다.
3. 유니코드에서 지원하는 다양한 문자를 변수 이름에 사용할 수 있습니다.
4. 문자열 타입 String, 문자 타입 Character를 지원합니다.
5. Array, Dictionary 컬렉션의 요소들은 동일한 타입이어야 합니다.
4. foreach 구문을 사용할 수 있고, for-range 루프 문을 지원합니다.
5. Switch-Case 문에 정수형 이외의 타입도 사용 가능합니다.
6. Swift의 모든 변수는 디폴트로 nil이 할당 될 수 없습니다.
7. nil 이 될수 있는 변수는 ? 연산자를 붙혀 optional 타입으로 선언합니다.
8. optional 변수는 사용하기 전에 !연산자를 사용하여 unwrapping 해야 합니다.
이번 시간에는 함수, 클로져, 그리고 enum 타입에 대해 알아보겠습니다.
optional 에 대해 다시한번 정리하고 갈까요?
optional 타입은 런타임에 발생할 수 있는 nil 에러를
컴파일 타임에 발견할 수 있도록 해줍니다.
보다 안전한 프로그램을 개발할 수 있도록 Swift 언어에서 제공하는 키워드이지요.
회사이름을 인자로 받아 주식코드를 반환하는 Objective-C 코드 예제입니다.
Facebook 에 대한 주식코드는 정의되지 않았기 때문에 마지막 라인의 코드에서
text 문자열에 nil을 추가하려고 하여 런타임 에러가 발생하는 코드입니다.
문법적으로는 유효한 구문이기 때문에
이 에러는 실제 프로그램이 실행되기 전까지 문제를 알 수 없습니다. 헉!
Swift에서는 optional 타입을 도입하여 이 문제를 멋지게 해결합니다.
nil이 될수 있는 변수는 optional 타입으로 선언하도록 강제한 것이지요.
"optional 타입"은 " nil이 될수 있으니 주의깊게 다루세요" 라고 말하는 것과 같습니다.
위 Swift 코드에서는 컴파일러가 컴파일 타임에 에러를 알려 줍니다. 굿!
optional 타입을 사용하기 전에는 반드시 옵셔널 타입을 상쇄해야 하는데, unwrapping 한다고 표현합니다.
unwrapping 하는 방법은 if 문을 사용하여 nil 이 경우에, ! 연산자를 사용하여 optional을 상쇄합니다.
if 문을 사용하는 이유는, nil 인 경우에 !연산자를 사용하면 런타임 에러가 발생하기 때문입니다.
nil이 아니라는 것을 보장하는 경우에 unwrapping해서 사용하라는 의미이지요.
이 구문은 swift에서 관용구 처럼 사용되는데, optional binding이라하는 좀더 세련된 방법을 제공합니다.
정확히 이전 구문예제와 동일한 역할을 하는 optional binding 구문입니다.
! 연산자 대신에 let 상수 키워드를 사용하여 unwrapping하는 것이 유일한 차이입니다.
자주 사용하게 될 구문이니 꼭 기억하세요.
함수 자체를 if 평가문에 사용하여 unwrapping 할수도 있습니다.
Swift에서는 func 키워드를 사용하여 함수를 정의합니다.
함수의 파라미터에 디폴트 값을 지정 할 수 있습니다.
buildGreeting()과 같이 인자없이 호출할 경우 name 파라미터에 "World" 문자열이 할당되어 사용됩니다.
튜플 타입을 지원합니다. 튜플은 쉽게 말하면 값의 묶음이라 할수 있습니다.
튜플은 선언과 동시에 상수가 되며, 값을 변경하려고 할 경우 컴파일 에러가 발생합니다.
튜플을 사용하면 한 번에 여러값을 전달하고, 반환할 수 있어서 편리합니다.
반환된 튜플을 어떻게 사용해야 할까요? 튜플 변수에 값을 할당하여 사용할 수 있습니다.
반환되는 튜플의 원소에 이름을 부여하여 사용할 수도 있습니다.
클로져는 쉽게 말해 실행가능한 코드블럭이라 할수 있습니다.
함수도 코드 블럭이기 때문에 클로져로 사용할 수 있습니다.
이 클로져를 변수에 할당해 두고 필요한 때에 호출해서 사용할 수 있습니다.
클로져는 파라미터와 반환하는 값, 그리고 코드 블럭으로 구성됩니다.
greetingPrinter는 파라미터와 반환값 없이, "Hello World!" 를 출력하는 클로져 입니다.
클로져의 재미있는 점은 함수의 인자 혹은 반환값으로 사용할 수 있다는 점입니다.
파라미터,반환값으로 정적인 데이터 뿐만이 아니라 동적인 행동(코드블럭)을
전달하여, 다양한 조합으로 사용할 수 있습니다.
위 코드는 코드블럭을 특정 횟수만큼 반복하는 클로져의 예입니다.
클로져가 마지막 파라미터 인 경우
위와 같이 함수의 꼬리에 클로져가 따라오는 형태로 사용할 수 있는데,
이런 형태를 Trailing 클로져라고 합니다.
Swift의 enum은 연관된 값을 전달하여 사용할 수 있습니다.
switch-case 문과 조합하여 유용하게 사용할 수 있는데, 자세한 설명은 나중으로 미루겠습니다.
Int 타입으로 정의한 Planet enum 변수를 println() 함수로 출력하면
엉뚱하게도 Enum Value 라는 값이 출력됩니다. enum이 갖는 값이 아닌 enum 자체가 출력되는 것입니다.
enum 의 원소값을 출력하고 싶을 때는, enum.toRaw() 멤버함수를 사용합니다.
enum 타입을 정수가 아닌 문자형으로 정의하여 원소값을 출력하는 예입니다.
나중에 클래스와 구조체에 대해 알아보겠지만
enum 도 초기화함수(생성자)와 멤버함수를 갖을 수 있습니다.
enum 을 생성하고 멤버함수를 호출하는 예입니다.
'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 |