본문 바로가기
IT공부/IOS개발

스위프트 공부 _ 연산자 (연산자의 종류)

by 놀고싶은 노자 2021. 7. 5.

오늘은 간만에 스위프트 공부를 하려고 한다. 

지난번에 데이터의 타입에 대해 공부를 했는데 오늘은 연산자에 관해 공부를 해볼까 한다. 

 

1. 연산자

프로그래밍 언어는 수학과 유사한 연산자의 집합을 지원하고 있다.

즉, 수학에서 어떤 함수에 작용해 그 함수를 다른 함수로 변형시키는 함수를 연산자라고 하는데 이러한 것이 프로그래밍 언어에도 비스무리하게 있다고 생각하면 된다. 

종류와 사용법을 소개할 텐데 그것들을 보면 좀 더 이해가 쉬울 것이다. 

 

2. 연산자의 종류

연산자는 종류가 매우 많다. 따라서 몇가지 주요한 연산자를 살펴보도록 하겠다. 

 

1) 산술 연산자

산술 연산자는 매우 친근한 연산자인데, 수학에서 쓰이는 연산자와 같은 역할을 수행한다고 생각하면 쉽다. 

연산자 부호 설명 사용례
더하기 + 앞의 값과 뒤의 값을 더한 값을 반환 a = 1 + 2                > a = 3
빼기 - 앞의 값에서 뒤의 값을 뺀 값을 반환 a = 2 - 1                > a = 1
나누기 / 앞의 값을 뒤의 값으로 나눈 값을 반환 int a = 1 / 2           > a = 0
double a = 1 / 2   > a = 0.5 
곱하기 * 양 값의 곱을 반환 a = 1 * 2               > a = 2
나머지 % 앞의 값을 뒤의 값으로 나누고 남은 값을 반환 a = 1 % 2              > a = 1

 

2) 할당 연산자 

할당 연산자는 값을 할당 할 때 사용하는 연산자이다. 

위 의 표에서 " = " 가 보이는데 바로 " = "가 할당 연산자 이다. 

뒤의 결과나, 값을 앞의 변수에 할당할 수 있게 해준다. 

이때 두개의 타입이 다른데 할당하려고 할 경우에 오류가 발생할 수 있다. 

 

3) 비교 연산자 

두 값을 비교할 때 쓰이는 연산자로 흔히 쓰이는 연산자 중에 하나이다. 

연산자 부호 설명
값이 같다 == 앞의 값과 뒤의 값이 같으면 true, 다르면 false 1 == 2                          // false
값이 다르다 != 앞의 값과 뒤의 값이 같으면 false, 다르면 true 1 != 2                            // true
값이 크거나 같다 >= 앞의 값이 뒤의 값 이상이면 true, 미만이면 false 1 >= 2                          // false
값이 작거나 같다 <= 앞의 값이 뒤의 값 이하면 true, 초과면 false 1 <= 2                           //true
값이 크다 > 앞의 값이 뒤의 값 초과면 true, 이하면 false 1 > 1                             // false
값이 작다 < 앞의 값이 뒤의 값 미만이면 true, 이상이면 false  1 < 2                             //false
참조가 같다 === 앞의 값과 뒤의 값이 참조 타입일 때, 앞과 뒤가 같은 인스턴스를 가르키고 있는지 확인하여 같으면 true, 다르면 false값을 반환 let a = SomeClass()
let b = SomeClass()
let c = a

a === b         false
a === c          true
c !== b           true
참조가 같지 않다 !== 앞의 값과 뒤의 값이 참조 타입일 때, 앞과 뒤가 같은 인스턴스를 가르키고 있는지 확인하여 같으면 false, 다르면 true값을 반환
패턴 매치 ~= 앞과 뒤의 패턴이 매치되는지 확인하여 true,false 반환 var a = 1
0 ..< 10 ~= a       // true

 

4) 범위 연산자 

값의 범위를 나타내고자 할 때 사용하는 연산자이다. 

연산자 부호 설명
폐쇄 범위 A...B A와 B사이의 값으로 AB를 포함
반폐쇄 범위 A..<B A이상 B미만
단방향 범위 A...
...A
..<A
A 이상
A 이하
A 미만

5) Bool 연산자

Boolean값의 논리 연산을 할 때 사용한다. 

연산자 부호 설명
NOT ! A 참 거짓의 반전
AND && 둘다 참일 경우에 참, 하나라도 거짓이면 거짓
OR || 둘 중 하나라도 참일 경우 참, 둘다 거짓일 경우 거짓

이는 많이 쓰이는 연산자이므로 꼭 기억해 두는 것이 좋다. 

 

6) 삼항 조건 연산자

삼항 조건 연산자란 피연산자가 세개인 조건 연산자 이다. 

 

(조건문 or Boolean) ? A : B

?앞의 값이  true일 경우 A값을 반환하고, false일 경우에는 B값을 반환하는 연산자이다.

 

7) 비트 연산자

비트 논리 연산을 위한 연산자를 말한다. 

* 비트 시프트 : 시프트 연산자는 지정하는 수만큼 피연산자를 좌우로 이동시킨다. 

연산자 표현 설명 실례
NOT ~A A의 비트를 반전한 결과를 반환  ~2       : ~10 => 01
AND A & B A와 B의 비트 AND연산 결과를 반환한다.  2 & 4   : 10 & 100 => 000
> OR A | B A와 B의 OR연산 결과를 반환 2 | 4     : 10 | 100 => 110
XOR A ^ B A와 B의 XOR연산 결과를 반환 2 ^ 4    : 10 ^ 100 => 001
비트 이동 연산자 A >> b, A << b A를 좌 또는 우로 b만큼 이동 4 <<.1.  : 100 << 1 => 1000    

8) 오버플로우 연산자

스위프트는 기본 연산자를 통해 오버플로우에 대비할 수 있도록 준비를 해두었는데, 오버플로우 연산자를 통해 자동으로 처리한다. 

var a : UInt8 = 0 // 0 ~ 255
var b : UInt8 = a - 1 // no minus so => runtime error
var c : UInt8 = a &- 1 // 255

var d = UInt8.max // 255
a = d + 1 // it is max => runtime error
a = d &+ 1 // 0

추가적으로 '&*' 곱하기 연산자도 있다. 

 

9) 복합 할당 연산자

복합 할당 연산자는 다른 연산자가 하는일을 한번에 할 수 있도록 연산자를 결합할 수 있다. 

A += B 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 A = A ^ B
A *= B A = A * B A <<= B A = A << B    
A /= B A = A / B A &= B A = A & B    

표를 보면 이해가 쉽게 될 것이다. 

 

10) 기타.

앞에서 설명한 기본적인 연산자들 이외에 스위프트 라이브러리에 정의된 연산자이다. 

연산자 부호 설명 사용례
nil 병합 연산자 ?? 앞의 값이 nil이 아니면 앞의 값을 nil이면 뒤의 값을 반환한다.  var a = b ?? 0
옵션널 연산자 ? 해당 값은 값이 있을 수도 없을 수도 있다.  var a? 
옵셔널 강제 추출 연산자 ! 옵셔널로 설정된 변수가 nil아니고 값이 있음을 확신할 때 사용하는것으로 옵셔널은 값이 있더라도 그자체로는 사용이 불가하기에 강제로 추출하는 것이다.  var b? = 1;
print(b) => optional(1)
var a = b! 
print(a) => 1
var c? = nil;
var a = c! // error
부호변경 연산자 - 양의 정수를 음의 정수로 변환 ,,  a = 1;
b = -a;
print(b) // -1

아마 기타에 있는 옵셔널은 앞으로도 주요하게 쓰일 예정이기 때문에 눈여겨 보는게 좋을 것이다. 

 

오늘은 각 연산자의 종류와 간단한 쓰임새를 공부했다. 

다음에는 각 연산자의 우선순위와 사용자가 정의한 연산자에 관해 알아보려 한다. 

아디오스