- 기본연산자
- 할당(대입), 산술, 비교 등의 동작을 수행하는 역할
- 단항(피연산자 1개), 이항(피연산자 2개), 삼항 연산자(조건 연산)
- 대입연산자(=)
- 우측항의 값을 좌측항에 대입하는 연산자
- 산술연산자(+, -, *, /)
- 덧셈, 뺄셈, 곱셈, 나눗셈 연산을 제공하는 연산자
- 나머지연산자(%)
- 나눗셈 연산의 나머지를 반환하는 연산자
- 단항 뺄셈 연산자(-)
- 숫자 데이터의 부호를 바꾸는 연산자
- 단항 덧셈 연산자(+)
- 숫자 데이터를 그대로 반환하는 연산자
Swift에서 연산자는 할당(Assignment), 산술(Arithmetic), 그리고 비교(comparison)와 같은 동작을 수행합니다.
예를 들어 덧셈 연산자(+
, addition operator)는 let i = 1 + 2
에서처럼 두 숫자를 더하는 역할을 하며,
논리연산자 AND(&&
)는 if enteredDoorCode && passedRetinaScan
에서처럼 두 개의 부울(Boolean) 값을 결합합니다.
Swift는 C와 같은 언어에서 알고있는 연산자를 지원하고 코딩 에러를 제거하기 위해 여러 기능을 향상시킵니다. 대입 연산자(=
, assignment operator)는 등호 연산자(==
)를 의도했을 때 실수로 사용되지 않도록 값을 반환하지 않습니다.
산술 연산자(+
, -
, *
, /
, %
등)는 타입이 수용할 수 있는 값의 범위보다 크거나 작은 숫자로 작업을 수행하려 할 때 예기치 않은 결과를 피하기 위해 값 오버플로우(overflow)를 감지하고 허락하지 않습니다. 오버플로우 연산자(Overflow Operator)에서 설명한 대로 Swift 오버플로우 연산자를 사용하여 값 오버플로우 동작을 결정할 수 있습니다.
Swift는 C에서는 없는 값의 범위를 나타내는 a..<b
및 a...b
와 같은 범위 연산자를 제공합니다.
이 챕터에서는 Swift의 기본 연산자에 대해 설명합니다. 고급연산자(Advanced Operators)에서는 Swift의 고급 연산자에 대해 다루고 사용자 정의 연산자를 어떻게 정의하고 사용자 정의 타입을 위한 표준 연산자의 구현은 어떻게 하는지 설명합니다.
연산자에는 단항(Unary), 이항(Binary), 삼항(Ternary) 연산자가 있습니다. 연산자가 영향을 주는 값은 피연산자(operand)입니다. 1 + 2
표현식에서 +
기호는 중위 연산자(infix operator)이고, 값 1
과 2
는 피연산자(operand) 입니다.
단항(Unary)연산자는 -a
처럼 하나의 피연산자(operand)에만 영향을 미치는 연산자입니다. Swift에는 단항 접두사 연산자와 단항 접미사 연산자가 있습니다.
// 단항 접두사 연산자(Unary Prefix Operator)
let number = 5
let result = -number
print(result) // 출력값 : -5
// 단항 접미사 연산자(Unary Postfix Operator)
let optionalNumber = Int("123") // optional(123)
let number = optionalNumber! // 123
// 옵셔널 강제추출 연산자 !
이항(Binary)연산자는 2 + 3
처럼 2개의 피연산자(operand)에 영향을 미치는 연산자입니다. 이항 연산자는 항상 두 개의 피연산자(operand) 사이에 사용합니다.
let a = 5
let b = 3
let sum = a + b
print(sum) //출력값 : 8
삼항(Ternary)연산자는 조건에 따라 두 가지 값 중 하나를 선택하는 연산자입니다. C처럼 Swift는 하나의 삼항 연산자만 가지고 있으며, 다음과 같이 사용됩니다.(a ? b : c)
let condition = true
let result = condition ? "참" : "거짓"
print(result) // 출력값 : "참"
위 삼항 연산자는 condition
이 true
이면, 참
을 반환하고, true
가 아니면 거짓
을 반환합니다.
대입연산자는(assignment operator)는 =
의 우측항의 값을 좌측항에 대입(초기화하거나 업데이트)합니다.
let b = 10
var a = 5
a = b // a에 b의 값인 10을 대입한다.
print(a) // 출력값 : 10
대입의 우측항이 여러 개인 튜플(Tuple)이라면, 튜플의 요소는 여러개의 상수 또는 변수로 한 번에 분해될 수 있습니다.
let(x, y) = (1, 2)
// x에는 1이, y에는 2가 대입되었다.
C언어와 Objective-C에서의 대입 연산자와는 다르게 Swift의 대입 연산자는 값을 반환하지 않습니다. 아래는 유효하지 않은 예시를 보여드립니다.
if x = y {
// x = y는 값을 반환하지 않기 때문에, 이 if 구문은 유효하지 않습니다. 따라서 적절한 값을 반환하는 연산자를 사용해야 합니다.
// x == y처럼 등호 연산자를 사용하면, true 또는 false 값을 반환하기 때문에 유효한 구문이 됩니다.
}
위와 같은 특징은 등호연산자(==
)가 실제로 사용되어야 할 곳에 실수로 할당연산자(=
)가 사용되는 것을 방지합니다.
Swift는 모든 숫자 타입에 대해 4개의 기본 산술 연산자(arithmetic operators)를 제공합니다.
+
)-
)*
)/
)1 + 2 // 결과 : 3
5 - 3 // 결과 : 2
2 * 3 // 결과 : 6
10.0 / 2.5 // 결과 : 4.0
C와 Objective-C에서의 산술 연산자와 다르게 Swift 산술 연산자는 기본적으로 값이 오버플로우 되는 것을 허락하지 않습니다. a &+ b
와 같은 Swift의 오버플로우 연산자를 사용하여 값 오버플로우 동작을 선택할 수 있습니다. 자세한 내용은 오버플로우(Overflow Operator)를 참고 바랍니다.
덧셈 연산자는 String
의 연결도 지원합니다.
"Hello, " + "world" // 결과 : "Hello, world"
나머지 연산자(remainder operator)(a % b
)는 a
를 b
로 나눈 나머지를 반환합니다.
나머지 연산자(
%
)는 다른 언어에서는 모듈로 연산자(modulo operator)라고 합니다. 그러나 음수에 대한 Swift의 동작은 모듈로 연산이 아닌 나머지 연산입니다.
여기 나머지 연산자가 어떻게 동작하는지 살펴봅시다. 9 % 4
를 계산하기 위해 9
안에 얼마나 많은 4
가 들어가는지 알아야합니다.
9
에 4
가 2번 들어가고 오렌지 색과 마찬가지로 1
이 남는 것을 알 수 있습니다.
Swift에서 이것을 작성해보면
9 % 4 // 결과 : 1
a % b
의 결과를 구하기 위해 %
연산자는 아래의 방정식을 계산하고 출력으로 remainder
를 반환합니다.
a = (b * some multiplier) + remainder
여기서 some multiplier
는 a
에 들어갈 b
의 최대 배수입니다.
이 방정식에 9
와 4
를 넣고 계산하면,9 = (4 * 2) + 1
a
에 음수를 이용하여 나머지를 계산할 때도 같은 메서드로 적용합니다.
-9 % 4 // 결과 : -1
방정식에 -9
와 4
를 넣고 계산하면, -9 = (4 * 2) + -1
. -1
의 나머지를 얻습니다. b
에 음수는 무시됩니다. 이것은 a % b
와 a % -b
는 항상 같은 결과를 얻는다는 의미입니다.
숫자 값의 부호는 -
접미사를 사용하여 변경할 수 있으며, 이것을 단항 뺄셈 연산자(unary minus operator)라고 합니다.
let three = 3
let minusThree = -three // 결과 : -3
let plusThree = -minusThree // 결과 : 3
단항 빼기 연산자(-
)는 공백없이 작동하는 값 바로 앞에 추가됩니다.
단항 덧셈연산자(+
)는 어떠한 변경없이 그 값을 그대로 반환합니다.
let minusSix = -6
let alsoMinusSix = +minusSix // 결과 : -6
단항 덧셈 연산자는 실제로 아무런 동작을 하지 않지만 음수에 단항 뺄셈 연산자를 사용할 때 양수에 대칭을 위해 사용할 수 있습니다.