Swift | 데이터 타입 기본
데이터 타입
- 스위프트에서 기본으로 제공하는 기능
- 프로그램 내에서 다뤄지는 데이터의 종류를 뜻한다.
- 스위프트의 기본 데이터 타입은 구조체를 타입의 기반으로 삼아 스위프트의 다양한 기능을 두로 사용하여 구현되어 있다.
- 스위프트의 모든 데이터 타입은 첫 글자가 대문자로 시작하는 대문자 카멜케이스를 사용한다.
Int와 UInt
- 정수 타입이다.
- Int : +, - 부호를 포함한 정수를 뜻하며, - 부호를 포함하지 않는 0을 포함한 양의 정수는 UInt로 표현한다.
- 각 타입의 최댓값과 최솟값은 각각 max와 min 프로퍼티로 알아볼 수 있다.
- 각각 8비트, 16비트, 32비트, 64비트의 형태가 있다.
(Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64)
- 시스템 아키텍처에 따라 Int와 UInt의 타입이 달라진다.
- 32비트 아키텍처에서는 Int32가 Int 타입으로, UInt32가 UInt 타입으로 지정된다.
- 64비트 아키텍처에서는 Int64가 Int 타입으로, UInt64가 UInt 타입으로 지정된다.
Bool
불리언 타입니다. 참(true) 또는 거짓(false)만 값으로 가진다.
ex) var boolean: Bool = true
boolean.toggle() // true - false 반전
let iLoveYou: Bool = true
let isTimeUnlimited: Bool = false
print(“시간은 무한합니까?: \(isTimeUnlimited)“
Float과 Double
- Float과 Double은 부동소수점을 사용하는 실수며 부동소수 타입이라고 한다.
- 흔히 우리가 말하는 소수점 자리가 있는 수이다.
- 부동소수 타입은 정수 타입보다 훨씬 넓은 범위의 수를 표현할 수 있다.
- 스위프트에는 64비트의 부동소수 표현을 하는 Double과
- 32비트의 부동소수 표현을 하는 Float이 있다.
- 64비트 환경에서 Double은 최소 15자리의 십진수를 표현할 수 있는 반면에
- Float은 6자리의 숫자까지만 표현이 가능하다.
- 둘 중 하나를 선택해 사용해야 하는 상황에서 잘 모르겠다면 Double을 사용하자~!
Character
- ‘문자‘를 의미한다. (단어, 문장 처럼 문자의 집합이 아닌 단 하나의 문자를 의미)
- 스위프트는 유니코드 9 문자를 사용하므로 영어는 물론 유니코드에서 지원하는 모든 언어 및 특수기호 등을 사용할 수 있다.
- 문자를 표현하기 위해서는 값의 앞뒤에 큰따옴표를 사용하여 표현한다.
ex) let alphabetA: Character = “A”
print(alphabetA) // A
// Character 값에 유니코드 문자를 사용할 수 있다.
let commandCharacter: Character = “♡“
print(commandCharacter) // ♡
let 한글변수이름: Character = “ㄱ”
// 한글도 유니코드 문자에 속하므로 스위프트 코드의 변수 이름으로 사용할 수 있다.
print(“한글의 첫 자음: \(한글이름변수)“) // 한글의 첫 자음: ㄱ
(실제 이모티콘과 한글을 코드에 적용할 수 있으나 실제 프로젝트에서는 이런 식으로 변수 이름을 정하지 않는다. )
String
- 문자의 나열, 즉 문자열 이다.
- Character와 마찬가지로 유니코드 9를 사용할 수 있다.
- 값의 앞뒤에 큰따옴표를 사용하여 표현한다.
ex) // 상수로 선언된 문자열은 변경이 불가능하다.
let name: String = “sebin”
// 이니셜라이저를 사용하여 빈 문자열을 생성할 수 있다.
// var 키워드를 사용하여 변수를 생성했으므로 문자열의 수정 및 변경이 가능하다.
var introduce: String = String()
// append() 메서드를 사용하여 문자열을 이어붙일 수 있다.
introduce.append(“제 이름은”)
// + 연산자를 통해서도 문자열을 이어붙일 수 있다.
introduce = introduce + “ “ + name + “입니다.“
print(introduce) // 제 이름은 sebin 입니다.
// name이 해당하는 문자의 수를 셀 수 있다.
print(“name의 글자 수: \(name.count)”) // name의 글자 수: 5
// 빈 문자열인지 확인해볼 수 있다.
print(“introduce가 비어있습니까? \(introduce.isEmpty)”)
// 유니코드의 스칼라값을 사용하면 값에 해당하는 표현이 출력된다.
let unicodeScalarValue: String = “\u(2665)”
(+ 그 밖의 String 타입의 다양한 기능은 p. 83)
특수문자
스위프트에서는 문자열 내에서 일정 기능을 하는 특수문자가 있다.
특수문자는 모두 백슬래시에 특정한 문자를 조합하여 사용한다.
- 스위프트에서 가장 많이 사용하는 특수문자
\n : 줄바꿈 문자
\\ : 문자열 내에서 백슬래시를 표현하고자 할 때 사용
\” : 문자열 내에서 큰따옴표를 표현하고자 할 때 사용
\t : 탭 문자, 키보드의 탭키를 눌렀을 때와 같은 효과
\0 : 문자열이 끝났음을 알리는 null 문자
ex) 문자열 내 특수문자 사용 예시
print(“문자열 내부에\n 이런 \“특수문자\”를\t사용하면 \\이런 놀라운 결과를 볼 수 있다“)
print(#”문자열 내부에서 특수문자를 사용하기 싫다면 문자열 앞, 뒤에 #을 붙인다”#
let number: Int = 100
print(#”특수문자를 사용하지 않을 때도 문자열 보간법을 사용하고 싶다면 이렇게
\#(number) 을 해보자“#)
결과)
문자열 내부에
이런 ”특수문자“를 사용하면 \이런 놀라운 결과를 볼 수 있다
문자열 내부에서 특수문자를 사용하기 싫다면 문자열 앞, 뒤에 #을 붙인다
특수문자를 사용하지 않을 때도 문자열 보간법을 사용하고 싶다면 이렇게 100을 해보자
Any, AnyObject와 nil
- Any는 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻이다.
- 변수 또는 상수의 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관 없이 할당할 수 있다.
- AnyObject는 Any보다는 조금 한정된 의미로 클래스의 인스턴스만 할당할 수 있다.
ex) var someVar: Any = “sebin” // Any로 선언된 변수에는 문자열도
someVar = 50 // 정수도
someVar = 100.1 // 실수, 또는 어떤 타입의 값이라도 할당할 수 있다.
** Any와 AnyObject는 될 수 있으면 사용하지 않는 편이 좋다.
타입에 엄격한 스위프트의 특성상 Any 또는 AnyObject로 선언된 변수의 값을 가져다 쓰려면
매번 타입 확인 및 변환을 해줘야 하는 불편함이 있고, 예기치 못한 오류의 위험을 증가시키기 때문.
nil
- 특정 타입이 아닌 ‘없음’을 나타내는 스위프트의 키워드 이다.
- 즉 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타내는 데 사용한다.
- 변수 또는 상수가 nil이면 해당 변수 또는 상수에 접근했을 때 잘못된 메모리 접근으로 런타임 오류가 발생한다.