산술 연산자 - Arithmetic Operators
Swift는 데이터 타입에 굉장히 민감한 언어이므로, 연산이 이루어지기 전에 두 피연산자의 데이터 타입 통일이 이루어져야 한다.(형식 안전성 - Type Safety)
산술 연산자 | 설명 | 사용 예시 |
---|---|---|
+ | 덧셈 | a + b |
- | 뺄셈 | a - b |
/ | 나눗셈 | a / b |
% | 나머지(정수 간 연산만 가능) | a % b |
실수 간의 나머지 연산은
truncatingRemainder()
메소드를 사용해야 한다.
let c = 12.0
let d = 5.0
c.truncatingRemainder(dividingBy: d) // 2
오버플로우 연산자 - Overflow Operators
다른 C 계열 언어와는 다르게, Swift에서는 오버플로우를 에러로 판단한다.
예를 들어, C에서는 char num = 127; num++; 에서 덧셈 연산 이후 num의 값은 -128이 되지만, Swift에서는 이것을 에러로 보고 컴파일하지 않는다.
하지만 문제 해결 과정에서 오버플로우를 일부러 일으키는 경우도 빈번히 있기 때문에, Swift에서도 오버플로우 연산자를 통해 오버플로우를 발생시킬 수 있다.
Swift의 오버플로우 연산자는 총 3가지(오버플로우 덧셈 연산자
, 오버플로우 뺄셈 연산자
, 오버플로우 곱셈 연산자
)다.
사용법은 간단하게도 나눗셈과 나머지 연산자를 제외한 산술 연산자 앞에 &(앰퍼샌드)를 붙여주기만 하면 된다.
- 오버플로우 덧셈 연산자 👉🏻
a &+ b
let a: Int8 = Int8.max // 127 // let b: Int8 = a + 1 --> error(overflow) let b: Int8 = a &+ 1 // -128
- 오버플로우 뺄셈 연산자 👉🏻
a &- b
let c: Int8 = Int8.min // -128 // let d: Int8 = a - 1 --> error(overflow) let d: Int8 = a &- 1 // 127
- 오버플로우 곱셈 연산자 👉🏻
a &* b
let e: Int8 = Int8.max &* 2 // -2
Int8.max * 2 = 127 * 2 = 254
0 -> ... -> 127 -> -128 -> -127 -> ... -> -2
비교 연산자 - Comparison Operators
비교 후 참인 경우 true, 거짓인 경우 false를 리턴함. 문자열 비교도 가능하다.
비교하는 두 피연산자의 자료형이 같아야 한다.
비교 연산자 | 설명 | 사용 예시 |
---|---|---|
> | a가 b를 초과하는지 판단 | a > b |
< | b가 a를 초과하는지 판단 | a < b |
>= | a가 b 이상인지 판단 | a >= b |
<= | b가 a 이상인지 판단 | a <= b |
== | 두 값이 같은지 판단 | a == b |
!= | 두 값이 다른지 판단 | a != b |
문자열을 비교하는 경우, 해당 문자열의 아스키 코드를 비교하여 더 큰 아스키 코드값을 가진 문자열을 크다고 판단한다.
example:"swift"
>"Swift"
:true
, s의 아스키 코드 값 : 115 / S의 아스키 코드 값 : 83
논리 연산자 - Logical Operators
논리 연산자 | 설명 | 사용 예시 |
---|---|---|
! | NOT 연산, Boolean 값 반전 | !a, !(a > b) |
&& | AND 연산 | a && b, (a > b) && (a > c) |
|| | OR 연산 | a || b, (a > b) || (a > c)) |
&&
와||
연산을 사용할 때에는Side effect
에 주의해야 한다.
예를 들어, a와 b의 값을 각각 1 증가시키고 true를 리 턴하는 함수 func1, func2가 있다고 하자.
if(func1() || func2()) {
...
}
에서 func1이 이미 참이므로 func2는 실행되지 않으며, 이 때 a의 값만 1 증가하고, b의 값에는 변함이 없다.
이런 경우를 방지하기 위해서는
let val1 = func1()
let val2 = func2()
if(val1 || val2) {
...
}
이런 식으로 두 함수의 실행을 확실히 보장하는 코드를 작성하면 된다.
삼항 연산자 - Ternary Conditional Operators
condition의 값이 참이면 expr1을, 거짓이면 expr2를 실행한다.
func isEvenNumber(num: Int) -> Bool {
let result = (num % 2 == 0) ? true : false
return result
}
'Development > Swift' 카테고리의 다른 글
[Swift]연산자 메소드 - Operator Method (0) | 2020.07.15 |
---|---|
[Swift]Swift가 제공하는 연산자들 - Operators in Swift (2) (0) | 2020.07.15 |
[Swift]이름 정의 규칙 - Camel Case (0) | 2020.03.03 |