개요
- 데이터 타입은 프로그램 내에서 다뤄지는 데이터의 종류를 의미.
- 스위프트의 기본 데이터 타입은 구조체를 타입의 기반으로 삼아 스위프트의 다양한 기능(익스텐션, 제네릭 등)을 두루 사용하여 구현되어 있음.
- 그중 가장 주목해야 할 점은 스위프트의 기본 데이터 타입이 모두 구조체를 기반으로 구현되어 있다는 점이다.
Int와 UInt
- 정수 타입을 의미.
- Int는 +,- 부호를 포함한 정수를 뜻하며 이 중 - 부호를 포함하지 않는 0을 포함한 양의 정수는 UInt로 표현.
- Int와 UInt 타입의 최댓값과 최솟값은 각각 max와 min 프로퍼티로 알아볼 수 있다.
- Int와 UInt는 각각 8비트, 16비트, 32비트, 64비트의 형태가 있음.
- 시스템 아키텍처에 따라 Int와 UInt의 타입이 달라진다. 32비트 아키텍처에서는 Int32가 Int 타입으로, UInt32가 UInt타입으로 지정된다. 64비트 아키텍처에서는 Int64가 Int 타입으로, UInt64가 UInt타입으로 지정된다.
Bool
- 불리언 타입은 참 또는 거짓만 값으로 가진다.
Float과 Double
- Float과 Double은 부동소수점을 사용하는 실수며 부동소수 타입이라고 한다.
- 부동소수 타입은 정수 타입보다 훨씬 넓은 범위의 수를 표현할 수 있음.
- 스위프트에는 64비트의 부동소수 표현을 하는 Double과 32비트의 부동소수 표현을 하는 Float이 있다. 64비트 환경에서 Double은 최소 15자리의 십진수를 표현할 수 있는 반면에 Float은 6자리의 숫자까지만 표현 가능.
Character
- Character는 '문자'를 의미. 단어, 문장처럼 문자의 집합이 아닌 단 하나의 문자를 의미.
- 스위프트는 유니코드9 문자를 사용하므로 영어는 물론, 유니코드에서 지원하는 모든 언어 및 특수기호 등을 사용할 수 있음.
String
- String은 문자의 나열, 즉 문자열임.
- String은 Character와 마찬가지로 유니코드 9를 사용할 수 있으며, 값의 앞뒤에 큰따옴표를 사용하여 표현.
- String은 Collection 프로토콜을 구현.
Any, AnyObject와 nil
- Any는 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻. 변수 또는 상수의 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관없이 할당할 수 있음.
- AnyObject는 Any보다는 조금 한정된 의미로 '클래스의 인스턴스'만 할당할 수 있음.
- Any와 AnyObject는 될 수 있으면 사용하지 않는 편이 좋음. 스위프트는 타입에 엄격하기 때문에 Any 또는 AnyObject로 선언된 변수의 값을 가져다 쓰려면 매번 타입 확인 및 변환을 해줘야 하는 불편함이 있을뿐더러 예기치 못한 오류의 위험을 증가시키기 때문.
- nil은 특정 타입이 아니라 '없음'을 나타내는 스위프트의 키워드이다. 즉, 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타내는 데 사용한다. 변수 또는 상수에 값이 없는 경우, 즉 nil이면 해당 변수 또는 상수에 접근했을 때 잘못된 메모리 접근(memory access)으로 런타임 오류가 발생.