Swift
Operator
dion_K
2020. 10. 23. 00:06
728x90
안녕하세요:)
오늘은 Swift에서 사용하는 연산자에 대해서 알아도록 할게요!!
1. 용어
- 연산자는 연산을 수행하는 기호입니다. 연산자에 의해 연산 되는 값의 수(피연산자의 수)에 따라 단항, 이항, 삼항 연산자로 구분됩니다.
- 단항 연산자(Unary OPerator) : 하나의 피연산자 앞뒤에 사용하는 연산자입니다.
- 이항 연산자(Binary Operator) : 두 피연산자 사이에 위치하는 연산자입니다.
- 삼항 연산자(Ternary OPerator) : 피 연산자가 세 개인 연산자입니다.
단항 연산자 | ex) +a (prefix, 전치 연산자) , a+ (postfix, 후치 연산자) |
이항 연산자 | ex) a + b (infix, 중위 연산자) |
삼항 연산자 | ex) a ? b : c |
2. Arithmetic Operator
- +, - , / , *, % 계산을 수행하는 연산자입니다.
- 연산자를 사용할 땐 공백이 중요합니다.
- 나머지 연산자는 실수를 지원하지 않습니다.
- 나머지 연산자에서 실수를 계산할 때는 truncatingRemainder 메소드를 사용해야 합니다.
- 나누기 연산자는 정수와 실수를 둘 다 지원합니다.
let a = 10
let b = 20
a + b // 30
a - b // -10
a * b // 200
a / b // 0
a % b // 10
a + b // o
a+b // o
a+ b // x 앞 뒤 공백을 일치시켜야 합니다.
let c = 12.5
let d = 20.7
c.truncatingRemainder(dividingBy: d)
< 우선 순위 >
- 연산자는 우선 순위를 가지고 있습니다.
- 보통 왼쪽 -> 오른쪽의 순서로 실행합니다.
- ( ) 를 통해서 우선 순위를 변경할 수 있습니다.
< 결합 규칙 >
- 왼쪽 -> 오른쪽 (좌결합성)이라 합니다.
- 오른쪽 -> 왼쪽 (우결합성)이라 합니다.
< overflow >
- overflow는 자료형에 저장할 수 있는 값의 범위를 초과하는 것을 말합니다.
- 연산자 앞에 &를 붙여 사용합니다.
- &+, &-, &*
let a: Int8 = Int8.max // 127
let b: Int8 = a &+ 1 // -128
3. Comparsion Operator
- 비교 연산자는 연산 결과가 항상 true 또는 false 입니다.
- 비교 연산자는 피연산자의 자료형을 일치시켜야 합니다.
연산자 | 사용 예 | 의미 |
< | a < b | a가 b보다 작으면 true, 그렇지 않으면 false |
> | a > b | a가 b보다 크면 true, 그렇지 않으면 false |
<= | a <= b | a가 b보다 작거나 같으면 true, 그렇지 않으면 false |
>= | a >= b | a가 b보다 크거나 같으면 true, 그렇지 않으면 false |
== | a == b | a와 b가 같으면 true, 같지 않으면 false |
!= | a != b | a가 b와 같지 않으면 true, 같으면 false |
4. Logical Operator
- 논리 연산자는 연산 결과를 Bool 타입의 값으로 표시하는 것은 비교연산자와 같지만 값의 크기 비교가 아닌 논리 비교를 통해 연산을 수행합니다.
연산자 | 사용 예 | 의미 |
!(NOT) | !a | a가 true이면 false, false이면 true 반환 |
&&(AND) | a && b | a와 b 모두 true일때 true, 둘 중 하나라도 false 이면 false 반환 |
||(OR) | a || b | a 또는 b 둘 중 하나라도 true이면 true, 둘 다 false일때 false |
&& 연산자
true && true // true
true && false // false
false && true // false
false && false // false
|| 연산자
true || true // true
true || false // true
false || true // true
false || false // false
< Short - circuit Evaluation >
- 논리식에서 결과 도출에 필요한 최소한의 코드만 실행하는 것을 단락 평가라고 합니다.
- 논리 연산자들은 결과 도출에 필요한 최소한의 논리식만 평가합니다.
< Side - Effect >
- 코드의 실행 결과로 인해서 값 또는 상태가 변경되는것 입니다.
- side effect는 항상 예측 가능한 범위 내에 있어야 합니다.
- 의도한 결과를 도출해야 합니다.
- 결과를 미리 도출해놔야 합니다.
5. Ternary Conditional Operator
- 삼항 연산자는 어떤 조건을 기준으로 두 개의 값 중에 하나를 선택할 때 사용합니다.
- 삼항 연산자는 condition? expr1: expr2로 구성되어 있습니다.
- 조건에서 true가 리턴되면 expr1의 값이 도출됩니다.
- 조건에서 false가 리턴되면 expr2의 값이 도출됩니다.
- 두 번째 피연산자와 세 번째 피연산자의 자료형이 같아야 합니다.
let weight = 70
weight > 80 ? "overweight" : "underweight"
6. Assignment Operator
- 할당 연산자는 값의 초기화, 변경 등 값을 할당할 때 사용하는 연산자입니다.
- 할당 연산자는 값을 리턴하지 않는다.
- lvalue, rvalue 할당 연산자를 기준으로 왼쪽 오른쪽
- lvalue는 rvalue로 사용이 가능합니다.
- lvalue는 할당 연산자 양쪽에 올 수 있지만 rvalue는 항상 오른쪽에 와야한다.
let a = 20
var b = 30
b = a // 20
< 복합 할당 연산자 >
a = a + b // a += b
a = a - b // a -= b
a = a * b // a *= b
a = a / b // a /= b
a = a % b // a %= b
7. Range Operator
- 범위 연산자는 스위프트에서 제공하는 독특한 연산자입니다.
- 값의 범위를 표현할때 사용하는 연산자입니다.
- 닫힌 범위 연산자와 반 닫힌 범위 연산자 두 가지 종류가 있습니다.
< 닫힌 범위 연산자 >
- lowerBound ... UpperBound , lowerBound와 UpperBound를 포함합니다.
- 기본적으로 오름차순으로 표현합니다.
1 ... 5
1...5
5 ... 1 // 에러가 일어납니다.
(1 ... 5).reversed() // 내림차순으로 변경
< 반 닫힌 범위 연산자 >
- UpperBound가 포함되지 않습니다.
1 ..< 5
1 >..5 // 에러가 일어납니다.
let a = 1
let b = 10
for num in a...b {
print(num)
}
for num in a..<b {
print(num)
}
728x90