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