❓ 타입이 왜 필요한가
: 컴퓨터는 변수나 상수를 선언하면 메모리에 공간을 생성한다. 이 때, 데이터가 어떤 형태로 저장해야하며 데이터의 크기가 얼만큼인지 정해주어야 컴퓨터가 인지할 수 있다. 또한 컴퓨터의 메모리 공간도 보다더 효율적으로 사용할 수 있을 것이다.
키워드 | 타입 설명 | 예시 |
---|---|---|
Int🔸 / 정수 | 정수. 8바이트(64비트환경에서) | 5, 7, -123, 0 |
Float / 실수 | 부동소수(6자리). 4바이트(32비트) | 3.14, -14.187 |
Double🔸 / 실수 | 부동소수(15자리). 8바이트(64비트) | 3.14, -14.187 |
Character / 문자 | 하나의 문자. 쌍따옴표 사용(“”) | “A”,“a”,“한”,“ ” |
String🔸 / 문자열 | 문자열. 쌍따옴표 사용(“”) | “안녕하세요”, “스티브 잡스” , “” |
Bool🔸 / 참과 거짓 | 참/거짓 | true, false |
기타 | UInt, UInt64, Int32 ... |
정수형 타입으로 -2,147,483,648 ~ 2,147,483,647 사이의 정수값을 표현가능하다.
var age: Int = 2
32비트의 부동 소수를 표현하는 타입으로 소수점 이하 6자리까지 정확한 표현이 가능하다.
var interestRate: Float = 1.2345678910
print("이자율은 \(interestRate)% 입니다.")
// 출력 : 이자율은 1.2345679% 입니다.
→ 소수점 이하 10자리를 입력하더라도 6자리까지만 정확한 값을 도출해내고, 아래의 값은 반올림하여 도출해낸다.
64비트의 부동 소수를 표현하는 타입으로 소수점 이하 15자리까지 정확한 표현이 가능하다.
var interestRate2: Double = 1.2345678910111213
print("이자율은 \(interestRate2)% 입니다.")
// 출력 : 이자율은 1.2345678910111213% 입니다.
참과 거짓을 표현하는 타입으로 참은 true
, 거짓은 false
로 표현한다.
var isOpen: Bool = true
var isLogged: Bool = false
if isOpen {
print("문이 열려 있습니다.")
}else {
print("문이 닫혀 있습니다.")
}
// 출력 : 문이 열려 있습니다.
func checkLoginStatus(_ isLogged: Bool){
if isLogged {
print("로그인되었습니다.")
}else {
print("로그아웃되었습니다.")
}
}
checkLoginStatus(isLogged)
// 출력 : 로그아웃되었습니다.
문자열을 표현하는 데이터타입으로 한 줄은 “문자열” 로 여러줄은 “””문자열“”” 로 정의가능하다.
// 빈 문자열 표현하는 방법
var emptyString: String = ""
var anotherEmptyString = String()
print(emptyString)
// 출력 :
print(anotherEmptyString)
// 출력 :
var introduce:String = """
안녕하세요
저는
배지해
입니다.
"""
print(str)
// 출력 : 안녕하세요
//저는
//배지해
//입니다.
문자열은 + 연산을 이용해 이어 붙일 수 있다.
var variableString = "Mom"
variableString += " and Dad"
print(variableString)
// 출력 : Mom and Dad
하나의 문자를 표현하는 데이터타입
var cha: Character = "a"
// 빈문자열은 Error
// cha = ""
// 공백문자는 가능
cha = " "
var catCharaters: [Character] = ["c","a","t","!"]
var catString = String(catCharaters)
print(catString)
// 출력 : cat!
var catCharaters1: [String] = ["cdd","aee","tee","!!!"]
// var catString1 = String(catCharaters1) 🚨Error
print(catCharaters1.joined())
// 출력 : cddaeetee!!!
var b: Int = 7
var c: Double = 3
var chr3: Character = " "
let str: String = ""
: 변수를 선언하면서 타입을 명확하게 지정하는 방식
var name: String = “홍길동”
var value: Double = 5.345
: 변수를 선언할 때, 타입을 지정하지 않아도 컴파일러가 타입을 유추하는 방식
var name = “홍길동”
type(of: name) // 결과 : String
var num1 = 2
type(of: num1) // 결과 : Int
❗️ type(of: 변수명) - 변수의 타입을 확인하는 함수이다.
컴파일러란?
소스 코드를 분석하여 기계어로 번역해주는 프로그램
소스코드분석 → 의미분석 → 코드최적화 → 코드 생성의 단계를 거침
: 스위프트는 데이터 타입을 명확하게 구분하여 사용하는 언어
❗️ 스위프트는 다른 타입끼리 계산할 수 없다.
var number = 12 // Int
// number = 3.14 -> 에러
// Int형 데이터 타입으로 선언된 변수에 실수를 넣으면 에러가 남
var x = 10
var y = 10.0
// var z = x + y 🚨 Error
// x와 y는 각각 Int 타입, Double 타입이므로 연산이 불가능함.
: 타입을 변환하는 방법
기존에 메모리에 저장된 값을 다른 형식으로 바꿔서, 새로운 값을 생성해서 다른 메모리 공간에 다시 저장
let str2 = "123"
type(of: str2)
// 결과 : String
let number1 = Int(str2)
type(of: number1)
// 결과 : Int
print(number1)
// 결과 : Optional(123)
타입형 변환에 실패하였을 때, nil 값이 리턴될 수 있다.
let doubleString = "321.2"
let number2 = Int(doubleString)
type(of: number2)
// 결과 : Int
print(number2)
// 결과 : nil
: 프로그래밍에서 (수학의)치환과 동일한 문법 (타입만 치환 시켜서 사용가능)
typealias Name = String
typealias Something = (Int) -> String
func someFunction(completionHandler: (Int) -> String) {
}
func someFunction2(completionHandler: Something) {
}
❓ 타입 애일리어스는 왜 써
: 길게 쓸때 유용하고, 문법이 간단해진다. ( 코드의 가독성을 높이기 위해 )