프로그래밍언어

Swift의 기본 연산자

애기공룡훈련병 2020. 2. 9. 15:45
반응형

이번 포스트에서는 Swift의 기본 연산자에 대해 살펴보도록 하겠습니다.

할당 연산자

할당 연산자는 값을 초기화하거나 이미 설정된 값을 새로운 값으로 변경하는 역할을 가지고 있습니다.

아래와 같이 상수, 변수 모두 사용할 수 있습니다. 또한 튜플 형식을 사용하여 여러 개의 값을 한 번에 할당할 수도 있습니다.

let num1 = 10
var num2 = 5
num2 = num1

// 결과 : num2 = 10, num1 = 10

let (numX, numY) = (10, 20)
// numX는 10, numY는 20이 할당됩니다.

C 혹은 Objective-C와는 달리 Swift에서 할당 연산자는 값을 반환하지 않는 특징을 하지고 있습니다.

즉, C 혹은 Objective-C에서 성공적으로 값이 할당된 경우 TRUE가 반환되어 if문 앞에 할당 연산자를 사용할 수 있었다면 Swift에서는 이러한 구문을 사용할 수 없습니다.

if num1 = num2 {

}

// 위와 같은 코드는 컴파일 에러가 납니다.(반환되는 값이 없으므로)

단항 Minus / Plus 연산자

Swift에서는 단항 Minus, 단항 Plus 연산자를 제공합니다. 

수학적으로 -(-3) => 3이 되는 것과 같은 연산을 수행할 수 있습니다. 다음과 같이 말이죠.

let minusOne = -1
let mMinusOne = -minusOne // mMinusOne => 1, minusOne => -1

let plusOne = 1
let pPlusOne = +plusOne // pPlusOne => 1, plusOne => 1

복합대입연산자 (Compound Assignment Operators)

복합대입 연산자는 할당 연산(=)과 사칙 연산(+,-,*,/,%)이 결합된 연산자로 표현식을 줄일 수 있습니다.

let num1 = 3
var num2 = 5

num2 += num1  // num2 => 8, num1 => 3

비교 연산자(Comparison Operators)

비교 연산자는 좌항과 우항을 비교해주는 연산자로

 

  • 같다 (a == b)

  • 같지않다 (a != b)

  • 크다 (a > b)

  • 작다 (a < b)

  • 크거나 같다 (a >= b)

  • 작거나 같다 (a <= b)

위와 같은 종류가 존재합니다.

 

 

같은 타입의 값을 갖는 두 개의 튜플을 비교할 수도 있습니다. 튜플의 비교는 왼쪽에서 오른쪽으로 이루어지며 한 번에 한 개의 값만 비교합니다. 즉, (a, b) == (c, d)와 같은 연산은 a == c와 b == d를 순차적으로 비교합니다. (모두 조건이 성립되어야 TRUE가 됩니다.)

(1, "zebra") < (2, "apple")   // true, 1이 2보다 작고; zebra가 apple은 비교하지 않기 때문
(3, "apple") < (3, "bird")    // true 왼쪽 3이 오른쪽 3과 같고; apple은 bird보다 작기 때문
(4, "dog") == (4, "dog")      // true 왼쪽 4는 오른쪽 4와 같고 왼쪽 dog는 오른쪽 dog와 같기 때문

삼항 연산자(Ternary Conditional Operator)

삼항 연산자는 if ~ else ~ 구문을 간편하게 사용하게 해주는 연산자입니다.

대표적인 형태는 (조건) ? (참일 때) : (거짓일 때) 와 같은 형태를 지니게 됩니다.

let num1 = 40
let isTrue = true
let num2 = num1 + (isTrue ? 10 : 20)

// num2 => 50 (40 + 10)

Nil 병합 연산자(Nil-Coalescing Operator)

nil 병합 연산자는 a ?? b 형태를 갖는 연산자 입니다. Optional 변수 a를 Unwrapping 한 후 만약 anil 인 경우 b를 반환합니다.

let str1 = "red"
var str2: String?   // 이 값은 default로 nil입니다.

var strSelect = str2 ?? str1

범위 연산자

닫힌 범위 연산자

범위의 시작과 범위의 끝이 있는 연산자입니다.

for index in 1...5 {
    print("\(index)")
}

반-닫힌 범위 연산자

범위의 시작과 끝 중 하나만 존재하는 연산자입니다.

let alphabets = ["A", "B", "C", "D"]
let count = alphabets.count
for i in 0..<count {
    print("Index \(i + 1) => \(alphabets[i])")
}

// 1 => A
// 2 => B
// 3 => C
// 4 => D

단방향 범위 연산자

범위의 시작 혹은 끝만 지정해 사용하는 범위 연산자 입니다. 지정한 시작 값 혹은 끝 값은 범위에 포함됩니다.

// 위의 예시에 있는 리스트를 참고

for alphabet in alphabets[2...] {
    print(alphabet)
}
// C
// D

for alphabet in alphabets[...2] {
    print(alphabet)
}
// A
// B
// C

단방향 범위 연산자는 값이 포함되었는지 검사할 경우에도 사용할 수 있습니다.

let range = ...5
range.contains(7)   // false
range.contains(4)   // true
range.contains(-1)  // true

논리 연산자

논리 연산자는 &&, ||, ! 3가지 대표 형태가 있습니다.

&& : and, || : or, ! : not

 

 

이번 포스트에서는 연산자에 대해 알아보았습니다.

반응형

'프로그래밍언어' 카테고리의 다른 글

Swift Collection Types (컬렉션 타입)  (0) 2020.02.10
Swift 문자열과 문자  (0) 2020.02.09
RxJava - 스케쥴러 (Scheduler)  (0) 2019.09.02
Kotlin 컬렉션 타입 - (2)  (0) 2019.09.01
Kotlin 컬렉션 타입  (0) 2019.08.30