변수와 상수
변수(variable)는 값을 수정할 수 있고 상수(constant)는 값을 수정할 수 없기 때문에 Swift에서는 안전하게 상수를 사용하는 것을 권장하고 있다. 변수는 var로 선언하고, 상수는 let으로 선언한다.
var name = "Soo"
let birthYear = 2024
var로 선언한 name은 이름을 바꾸고 싶을 때 바꿀 수 있지만, 태어난 해를 바꾸려고 할 땐 컴파일 에러가 발생한다.
name = "Sooo"
birthYear = 2023 // Compile Error!
Cannot assign to value: 'birthYear' is a 'let' constant
let 키워드로 선언된 상수의 값을 변경할 수 없다는 에러이므로 바뀌면 안 되는 값은 상수로 정의해두자.
Swift는 변수나 상수를 정의할 때 그 자료형이 어떤 타입인지 명시해주어야 하는 정적 타이핑 언어이다.
var name: String = "Soo"
let birthYear: Int = 2024
var height: Float = 50.7
변수 또는 상수 이름 뒤에 콜론( : )을 붙이고 자료형을 써주면 되는데, : String과 : Int 등을 가지고 타입 어노테이션(Type Annotation)이라 한다.
Swift는 타입을 엄격히 다루기 때문에 다른 자료형끼리는 기본적인 연산조차 되지 않는다. 아래와 같이 Int타입과 Float 타입을 더하려고 하면 컴파일 에러가 발생한다.
birthYear + height // Compile Error!
Binary operator '+' cannot be applied to operands of type 'Int' and 'Float'
이런 경우 아래와 같이 명확하게 사용해야 한다.
Float(birthYear) + height // 2074.7
String(birthYear) + "년에 태어난 " + name + "입니다!" // 2024년에 태어난 Soo입니다!
"\(birthYear)년에 태어난 \(name)입니다!" // 2024년에 태어난 Soo입니다!
타입 추론(Type Inference)
Swift 컴파일러는 큰 따옴표( " )로 감싸진 텍스트는 String 타입인 것을 알고, 숫자는 Int 타입인 것을 인식한다. 타입을 직접 명시하지 않고도 값을 가지고 정적 타이핑을 할 수 있게 해주는 것을 타입 추론(Type Inference)라고 한다.
배열(Array)과 딕셔너리(Dictionary)
배열과 딕셔너리는 모두 대괄호( [ ] )를 이용해서 정의할 수 있다.
var languages = ["Swift", "Java", "Objective-C"]
var capitals = [
"한국": "서울",
"일본": "도쿄",
"중국": "베이징"
]
배열과 딕셔너리에 접근하거나 값을 변경할 때도 대괄호를 사용한다.
languages[0] // Swift
languages[1] = "Python"
capitals["한국"] // 서울
capitals["프랑스"] = "파리"
배열과 딕셔너리도 let으로 정의한다면 값을 추가/수정/삭제 할 수 없다.
배열과 딕셔너리는 대괄호 안에 어떤 타입을 받을 것인지 명시한다.
var languages: [String] = ["Swift", "Java", "Objective-C"]
var capitals: [String: String] = [
"한국": "서울",
"일본": "도쿄",
"중국": "베이징"
]
빈 배열이나 빈 딕셔너리 또한 대괄호를 사용해 타입을 명시한다.
var languages: [String] = []
var capitals: [String: String] = [:]
빈 배열로 선언하는 것을 조금 더 간결하게 하고자 한다면 아래와 같이 사용한다.
var languages = [String]()
var capitals = [String: String]()
타입 뒤에 괄호()를 쓰는 것은 생성자(initializer)를 호출하는 것이다.
🐣 출처: 전수열님 GitBook
이 글은 전수열님의 깃북을 참고하여 작성한 글입니다.