이번 편의 목표: 바뀌지 않는 값과 바뀌는 값을 나누고, 정수·실수·문자열·불리언을 컴파일러가 구분하게 합니다.

let은 한 번 넣은 값을 유지합니다. var는 이후 다른 값을 넣을 수 있습니다. 타입을 생략하면 처음 넣은 값으로 추론합니다. 추론 결과를 눈에 보이게 하려면 콜론 뒤에 타입을 적습니다.

Swift
let dailyFee = 100
var lateDays = 3
let title: String = "개미"
let available: Bool = true
let rate: Double = 0.5

lateDays = 4
print(dailyFee * lateDays)
print(title)
print(available)
print(rate)

dailyFee는 Int입니다. 4를 곱하면 400이 출력됩니다. title은 문자열이라 정수와 곱할 수 없습니다. available은 참과 거짓만 담습니다. rate는 Double이라 0.5가 그대로 출력됩니다.

lateDays에 문자열을 넣으면 컴파일이 멈춥니다. 스위프트는 한 변수의 타입을 중간에 바꾸지 않습니다. Int 결과가 그 타입에 들어가지 않는 곱셈은 그 지점에서 실행이 멈춥니다. 연체 일수처럼 범위가 작은 값은 그대로 두고, 더 넓은 범위가 필요하면 Int64처럼 처음부터 그 타입으로 선언합니다.

문자열 안에 값을 넣을 때는 보간을 씁니다. 앞의 파일에서 print 네 줄을 다음 한 줄로 바꿉니다.

Swift
print("\(lateDays)일의 연체료는 \(dailyFee * lateDays)원입니다.")

역슬래시와 괄호 안의 식이 값으로 바뀝니다. 이 파일에서는 lateDays가 4이므로 4일의 연체료는 400원입니다. 가 출력됩니다.

직접 해 보기

가격 12000을 let으로 두고, 권 수 2를 var로 둔 뒤 둘을 곱해 출력하세요. 권 수를 3으로 바꾼 뒤 다시 곱합니다.

해설

첫 곱은 24000이고 둘째 곱은 36000입니다. 가격은 let이라 12000에서 바뀌지 않고, 권 수만 var로 바뀝니다.