2. 각종 연산자(Operator)

연산자는 값을 체크, 변경, 결합하기 위해 사용하는 기호나 구이다.
스위프트에서는 C언어에서 다루지 않는 범위연산자를 가지고 있다.

술어

1. 연산자는 단항(unary), 이항(binary), 삼항(teranry)연산자로 구분된다.

-a, !b // 단항연산자 예시
// 다음과 같이 단일항목에 동작한다. 단항접두사 연산자는 값 바로 앞에 위치함.

2 + 3 // 이항 연산자 예시
//두 개의 항목에 동작하고 2개의 항목사이에 위치하여 위치는 고정이다.

a ? b : c // 삼항 연산자의 예시
//삼항 연산자의 예시는 위 하나다. 조건에 따라서 피연산자에 영향을 준다.

대입 연산자

1. 대입 연산자, a = b는 b의 값으로 초기화 되거나 업데이트 한다.

let b = 10
var a = 3
a = b
//이런식으로 선언해주게 되면 a의 값은 b로 업데이트 된다.

2. 대입의 우항이 튜플이라면 튜플요소는 여러개의 상수와 변수로 분해 가능하다.

let (x, y) = (1, 2)
//이런 경우 x = 1, y = 2로 다음과 같이 초기화 된다

산술 연산자

1. 스위프트는 모든 숫자타입에 대해서 4개(덧셈, 뺄셈, 곱셈, 나눗셈)의 기본 산술연산자를 제공한다.

1+2
1-2
2*3
10.0/2.0
//다음과 같이 모든 숫자타입에 대해서 산술 연산자를 제공한다.

2. 덧셈 연산자는 문자열의 덧셈도 지원한다.

"hello" + "world"

나머지 연산자

1. 나머지 연산자는 나누기 후의 나머지를 계산한다.

9%4 = 1 // 다음과 같이 4*2를 뺀 나머지 1을 반환한다.

2. 음수 나머지 연산의 경우에는 배수에 대한 나머지를 반환한다.

-9%4 // -1을 반환한다. 이유는. -4*2 + (-1) 이기 떄문이다. 
//나머지 연산자의 경우 나누는 수에 음수가 들어와도 이는 절대값 취급되고, 음수 기호는 무시된다.

단항빼기 및 더하기 연산자

1. 숫자값의 부호는 접두 기호를 통해 변경 가능하다.

let three = 3
let minus = -three
//다음과 같이 선언하면 minus의 값은 -3을 가지게 된다.
//단항 더하기 연산자는 변경없는 값을 그대로 반환한다.

let plus = +minus
//이 경우 plus값은 -3을 그대로 유지한다.

복합 대입 연산자

1. 복합 대입 연산자는 +=, -= 다음과 같으며, 이는 덧셈과 뺄셈의 줄임표현이다.

var a = 1
a += 1
// 이 경우 a = 2가 된다.
// a += 1은 a = a+1 의 줄임으로 사용된 것이다.

2. 복합대입 연산자는 값을 반환하지 않는다.

let b = a += 2 코드를 작성할 수 없다. 연산 그 자체로 기능한다.

비교 연산자

1. 스위프트는 아래 코드 예시와 같은 다양한 비교 연산자를 제공한다.

a == b // 같음
a != b // 다름
a > b // 큼
a < b // 작음
a >= b // 크거나 같음
a <= b // 작거나 같음

2. 각 비교 연산자는 구문이 true, false 인지 식별하기 위해 Bool 값을 반환한다. 그리고 이는 흐름제어에 사용 가능하다.

if name == "hello world" {
	print(name)
}
//다음과 같이 위의 비교 연산자에서 true를 리턴한다면 클로저가 실행된다.

3. 비교 연산자는 값은 타입과 같은 갯수를 가지고 있는 두개의 튜플에 대해서 비교 가능하다. 다만 부울 값은 비교가 불가능하므로 에러를 발생시킨다.

삼항조건 연산자

1. 삼항조건 연선자는 question ? answer1 : answer2 다음과 같은 로직을 갖는 특별 연산자이다.

let rowHeight = highHeight + (HasHeader ? 50 : 20)
//위와 같은 형태로 값을 프로퍼티의 참 거짓 여부에 따라 식별하여 대입이 가능하다.

nil 결합 연산자

1. 이는 a ?? b 다음과 같이 표현하는데, 옵셔널 타입 a에 값이 있으면 a를 풀고, a가 nil이라면 b값을 반환하는 연산자이다.

print(a ?? b)
//이렇게 심플하게 나타낼 수 있다. 만약 a가 비어있다면 b가 출력될 것이다. 

범위 연산자

1. 닫힌 범위 연산자는 for루프와 같이 모든 값을 사용할 범위를 나타낼 수 있다.

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

//다음과 같이 닫혀진 범위를 지정할 때 사용한다.

2. 반열림 범위 연산자는 최종 값은 포함되지 않는 제한된 연산범위를 제공할 수 있다.

for index in 1..<5 {
}

//다음과 같이 선언하게 되면 마지막 값 5는 최종적으로 루프에 해당되지 않는다.

3. 단 방향 범위는 한 방향으로 계속되는 범위를 나타낸다.

for name in names[2...] {
}

//다음과 같이 하게되면, names배열의 인덱스 2번 값 이후의 모든 값을 조회할 수 있다.

for name in names[...6] {
}

//다음과 같이 물론 반대방향도 가능하다.

for name in names[..<6] {
}

//다음과 같이 단방향 범위 내 반열림 볌위 연산자를 통해서 범위 지정도 가능하다.

4. 논리 연산자는 로직의 부울 값을 true와 false로 수정하거나 결합한다. 논리 연산자는 크게, Not, And, Or의 세 가지 값을 가지게 된다.

!a // 논리적 Not 연산자이다. a가 true인 경우 false로, 반대 값을 만들어 준다.

a && b 
// 논리적 And 연산자이다. 두 개중 하나라도 false인 경우 false이다.
// 교집합 연산으로 모두 값이 모두 true여야 접근이 가능해진다.

a || b 
// 논리적 Or 연산자이다.
// 이는 합집합 연산으로 둘중 하나라도 true라면 true를 반환하여, 접근이 가능해진다.

5. 논리적 연산자 &&와 ||는 왼쪽 우선결합이다. 따라서 다양한 논리연산자가 중첩되는 경우에는 가장 왼쪽에서부터 논리를 따지게 된다.

a || b && c && d
// 다음과 같은 경우 순서는 a에서부터 순차적으로 부울 값을 따져가며 연산이 진행된다.

6. 소괄호를 명시하여도 연산의 순서는 변화하지 않으며 다만 명시적 소괄호를 통해서 사용자의 코드 해독을 도울 수 있다.

a || (b && c) && d
// 다음과 같이 괄호를 명시하여도, 결과적으로 연산은 좌측 a에서부터 진행된다.

포스트가 좀 길어졌는데, 모든 연산자들에 대한 내용으로 딱히 구획을 나눌 이유가 없었다. 오늘은 술어로부터 산술연산자, 최종적으로 논리적 연산자까지 공부해보았다. 아는 것이 많을 순 있지만 정확한 용어를 숙지하고, 개념을 아는 것은 중요하기 때문에 상관없다고 생각한다. 오늘 다룬 연산자들은 변수의 속성과 흐름제어의 방향을 유저가 기획한다는 점에서 정확하게 알아야 하는 부분이었다.😀

좋은 웹페이지 즐겨찾기