Swift는 타입에 엄격한 프로그래밍 언어다.
nil
객체를 만들거나 사용할 수 없다.?
모양의 옵셔널(Optional)을 이용하여 표시한다.Swift는 표현성을 고려한 프로그래밍 언어다.
func greet(person: String, from hometown: String) -> String {
return "안녕하세요, \(hometown)에서 오신 \(person)님!"
}
greet(person: "한솔", from: "춘천")
// 출력값: 안녕하세요, 춘천에서 오신 한솔님!
코드를 작성할 때 최대한 매끄럽게 읽히도록 코드를 작성하면 좋다 😃
값을 저장했거나 저장할 메모리 주소값을 이름으로 연결해 놓은 것
Initialize (초기화): 키워드로 선언된 변수나 상수에 처음으로 값을 대입하는 과정
var: 변경할 수 있는 값 선언
변수의 값을 변경할 때에는 처음 저장했던 값과 일치하는 타입이어야 한다.
var age = 10 // Int 타입
age = 50 // Int 타입
let: 변경할 수 없는 값 선언
let name = "세종"
name = "숙종" // 🚨Error: Change 'let' to 'var' to make it mutable
💡 왜 변수와 상수를 구분해서 쓸까?
프로그래밍 소스 관리 목적상 변하지 않는 값은 상수에 저장하는 것이 훨씬 효율적이다.
그 이유는 두가지로 정리할 수 있다.
1. 실수로 값이 변경되는 일을 막을 수 있다.
2. 값의 성격이 명확히 분류되므로 관리가 쉽다.
Int: 정수를 표현하는 데이터 타입
var age: Int = 18 // Int 타입
Float: 소수점을 표현하는 데이터 타입으로 32비트 부동 소수를 표현
Float의 정밀도는 소수점 이하 6자리까지 가능
var interestRate: Float = 1.2345678910 // Float 타입
print("이자율은 \(interestRate) % 입니다")
// 출력값: 이자율은 1.2345679 % 입니다
Double: 소수점을 표현하는 데이터 타입으로 64비트 부동소수를 표현
Double의 정밀도는 소수점 이하 15자리 이상 가능
두 유형 모두 적합한 상황에서는 Double을 사용하는 것이 좋다 (출처: 공식 문서)
var interestRate: Double = 1.2345678910123456789 // Double 타입
print("이자율은 \(interestRate) % 입니다")
// 출력값: 이자율은 1.2345678910123457 % 입니다
Bool: 참 true
와 거짓 false
을 표현할 수 있는 데이터 타입
var isMan: Bool = true // Bool 타입
String: 문자열을 표현하는 데이터 타입으로 텍스트를 표현
var emptyString: String = ""
var anotherEmptyString = String()
var variableString = "Horse"
variableString += " and carriage"
print(variableString)
// 출력값: "Horse and carriage"
Character: 하나의 문자를 표현하는 데이터 타입
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// 출력값: "Cat!🐱"
Any: 다양한 데이터 타입의 값을 수용
Any 배열을 만들면 특정 타입의 배열이 아니라 여러 타입을 담을 수 있지만 Any 데이터 형을 대입하려면 반드시 형 변환이 필요
var anyArray: [Any] = [1,"Hi", true]
var anyValue: Any = 1000
anyValue = "어떤 타입도 수용 가능"
anyValue = 12345.67
// 컴파일 에러
let doubleValue: Double = anyValue // 🚨 에러 메시지: Cannot convert value of type 'Any' to specified type 'Double'
// Any 타입에 Double 값을 넣는 것은 가능하지만
// Any는 Double 과 엄연히 다른 타입이 때문에
// Double 타입의 값에 Any 타입의 값을 할당할 때에는 명시적으로 타입을 변환해서 사용해야 한다.
글이 많은 도움이 되었습니다, 감사합니다.