스위프트에서 사용하는 기본 데이터 타입에 대해 알아보겠습니다.
- 데이터 타입이란?
프로그램 내에서 다뤄지는 데이터의 종류
- 데이터 타입 특징
- 구조체 타입 기반으로 구현됨
- 대문자 카멜 케이스를 사용
- Character
- 하나의 문자
- 유니코드 9 문자 사용 (알파벳, 숫자, 한글, 특수문자 사용 가능)
- 큰따옴표를 사용
let alpabel: Character = "A"
let number: Character = "1"
let korean: Character = "ㄱ"
let special: Character = "☆"
- String
- 문자열
- 유니코드9 문자 사용 (알파벳, 숫자, 한글, 특수문자 사용 가능)
- 큰따옴표 사용
- 멀티라인 사용 시 큰따옴표 세 개 사용
// 상수로 문자열 선언
let dog: String = "강아지"
// 빈 문자열 생성
var i: String = String()
// append를 사용하여 문자열 이어 붙임
i.append("나는")
// + 연산자로 문자열 이어 붙임
i = i + " " + dog + "를 좋아합니다."
// 문자 수 조회
print("dog 글자 수: \(dog.count)") // 3
// 빈 문자열인지 확인
print("i가 빈 문자열인가?: \(i.isEmpty)") // false
// 문자열 비교
let cat: String = "고양이"
var isSameString: Bool = false
isSameString = dog == cat
print("강아지 고양이 문자열 비교 : \(isSameString)") // false
isSameString = dog == "강아지"
print("강아지 강아지 문자열 비교 : \(isSameString)") // true
// 멀티 라인
let multiline = """
큰따옴표 세 개로 여러 줄 입력 가능
단, 큰따옴표 세 개 입력 후 다음 줄에 입력해야 하며
마지막 줄 입력 후에도 다음 줄에 큰따옴표 세 개를 입력해야 함
"문자열 안에서 큰따옴표 사용 가능"
"""
/*
큰따옴표 세 개로 여러 줄 입력 가능
단, 큰따옴표 세 개 입력 후 다음 줄에 입력해야 하며
마지막 줄 입력 후에도 다음 줄에 큰따옴표 세 개를 입력해야 함
"문자열 안에서 큰따옴표 사용 가능"
*/
- Int, UInt
- 정수 타입
- Int: +, - 부호를 포함한 정수
- UInt: - 부호를 포함하지 않는 정수 (0과 + 부호를 포함)
- Int와 UInt는 각각 8비트, 16비트, 32비트, 64비트의 형태가 존재
Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64
- 10진수: 평소 사용하던 숫자
- 2진수: 접두오 0b
- 8진수: 접두어 0o
- 16진수 접두어 0x
let int10: Int = 30 // 30을 10진수로 표현
let int2: Int = 0b11110 // 30을 2진수로 표현
let int8: Int = 0o36 // 30을 8진수로 표현
let int16: Int = 0x1e // 30을 16진수로 표현
* Int와 UInt 중 어떤 것을 사용해야 할까?
플랫폼에 따른 Int의 최댓값 이상 UInt의 최댓값 미만을 사용하게 되는 경우 이외에는 Int 타입을 사용하는 것이 좋습니다.
Int와 UInt를 사용하는 경우 완전히 다른 타입으로 인식되기 때며, 두 타입을 모두 사용하면 정수 타입의 변수끼리도 값을 교환할 때 많은 자원을 소모하기 때문에, 위 케이스 외에는 Int 타입을 사용하는것이 좋습니다.
- Float, Double
- 실수. 소수
- Float: 32비트의 부동소수 표현
- Double: 64비트의 부동소수 표현
var height1: Float = 180.5
var height2: Double= 160.5
* Float와 Double 중 어떤 것을 사용해야 할까?
필요에 따라 둘 중 하나를 선택하여 사용할 텐데 무엇을 사용해야 할지 잘 모르는 상황이라면 Double을 사용하실 권장합니다.
- Bool
- 참(true) 또는 거짓(false)
let isKorean: Bool = true
var isCold: Bool = false
- Any, AnyObject
- Any: 함수 타입을 포함하여 모든 데이터 타입의 인스턴스 사용 가능 (Objective-C의 id와 동일)
- AnyObject: 모든 클래스의 인스턴스 사용 가능
Any와 AnyObject는 될 수 있으면 사용하지 않는게 좋다. 사용 시마다 타입 체크 및 형 변환을 해야 하기 때문에 불편하다.
// Any에 다양한 타입 변수 세팅
var someVar: Any = "someText"
print(someVar) // "someText"
someVar = 123
print(someVar) // 123
someVar = 155.5
print(someVar) // 155.5
// 배열에 다양한 타입 세팅
var someArr: [Any] = [123, "abc", 155.5]
print(someArr[0]) // 123
print(someArr[1]) // "abc"
print(someArr[2]) // 155.5
* Any와 AnyObject는 될 수 있으면 사용하지 않는 것이 좋습니다.
타입에 엄격한 스위프트의 특성상 Any 또는 AnyObject로 선언된 변수의 값을 가져다 쓰려면 매번 타입 확인 및 변환을 해줘야 하는 불편함이 있을뿐더러 예기치 못한 오류의 위험을 증가시키기 때문입니다.
- nil
- nil은 특정 타입이 아니라 '없음'을 나타내는 스위프트의 키워드입니다.
- 즉, 변수 또는 상에 값이 들어있지 않고 비어있음을 나타내는 데 사용합니다.
- nil일 때 해당 변수 또는 상수에 접근했을 때 잘못된 메모리 접근으로 런타임 오류가 발생합니다. (ex. Null Point Exception)
출처: <스위프트 프로그래밍 - 야곰>
'iOS > 개념' 카테고리의 다른 글
[Swift] 프로퍼티 (Properties) 종류 (저장 or 연산 or 타입) (0) | 2022.03.08 |
---|---|
[Swift] SwiftUI Stack (VStack, HStack, ZStack) (0) | 2022.02.23 |
[Swift] 변수(variable)와 상수(caontant) (+상수 사용 이유) (0) | 2020.11.03 |
[Swift] 주석 (1) | 2020.11.02 |
[Swift] 기본 명명 규칙 (0) | 2020.11.02 |