Swift는 숫자를 크게 두 가지 범주로 나눠요. 정수와 실수예요.
숫자 리터럴에 밑줄을 넣으면 읽기 쉬워져요. 1_000_000은 1000000과 완전히 같아요.
실수 리터럴은 십진 표기법이나 지수 표기법으로 쓸 수 있어요.
대부분의 경우 정수에는 Int를, 실수에는 Double을 사용해요.
let speed: Int = 42 // Explicit Int
let pi: Double = 3.14 // Explicit Double
let giga: Double = 1_000_000_000 // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34 // Double in scientific notation
Swift는 숫자 계산을 위한 표준 산술 연산자를 제공해요.
| 연산자 | 설명 | 예시 |
|---|---|---|
+ |
덧셈 |
4 + 6의 결과는 10
|
- |
뺄셈 |
15 - 10의 결과는 5
|
* |
곱셈 |
2 * 3의 결과는 6
|
Swift는 타입에 안전해서 산술 연산에서 서로 다른 숫자 타입을 섞는 것을 허용하지 않아요.
Int와 Double을 바로 더하거나 곱할 수는 없어요. 먼저 둘 중 하나의 타입을 다른 쪽에 맞게 변환해야 해요.
/ 연산자는 나눗셈을 해요.
두 피연산자가 모두 정수라면 정수 나눗셈이 소수 부분을 버려요.
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
0이 아닌 실수를 0으로 나누면 inf나 -inf가 돼요.
0.0을 0.0으로 나누면 nan(Not a Number)이 나와요.
반면 정수를 0으로 나누면 컴파일 시점이나 실행 시점에 오류가 발생해요.
print(5.0 / 0.0) // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0) // Prints nan
// The following line will not compile:
// print(5 / 0) // Error: Division by zero
나머지 연산자 (%)는 두 정수를 나눈 뒤 남는 나머지를 계산해요.
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Swift에서 %는 모듈로 연산자가 아니라 진짜 나머지 연산자예요.
결과는 두 번째 피연산자의 부호와 상관없이 항상 첫 번째 피연산자(피제수)의 부호를 따라요.
5 % -2 // 1
-5 % 2 // -1
rounded() 메서드로 실수를 반올림할 수 있어요.
기본적으로 rounded()는 가장 가까운 정수로 반올림해요.
.up이나 .down 같은 반올림 규칙을 직접 지정할 수도 있어요.
let x = 3.14
let y = x.rounded() // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up) // 4.0
타입을 명시하지 않고 숫자 상수나 변수를 선언하면 Swift가 타입을 추론해요.
Int가 돼요.Double이 돼요.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
서로 다른 타입의 값끼리 연산하려면 Double(_:)이나 Int(_:) 같은 타입 이니셜라이저로 값 하나를 변환해요.
let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0
let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)