Swift Deep Dive: Basic Operators
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html에 들어가면 다양한 Swift 문법에 대한 정보가 제공되어있다.
The Basics — The Swift Programming Language (Swift 5.6)
The Basics Swift is a new programming language for iOS, macOS, watchOS, and tvOS app development. Nonetheless, many parts of Swift will be familiar from your experience of developing in C and Objective-C. Swift provides its own versions of all fundamental
docs.swift.org
Apple에서 제공하는 만큼 한 번쯤은 꼭 읽어보고 지나가고 싶어 해당 원문을 베이스로 일부 내용을 정리해보고자한다.
기본 연산자(Basic Operators)는 값을 확인하고 묶고 변환시키는데 사용한다. 단어는 어렵지만 결국 수학시간에 배운 내용들을 떠올리면 매우 간단하다.
a와 b가 같은지, a와 b 둘 중 어떤 값이 더 큰지, a의 값이 1이었는데 3으로 바꿔준다던지 등 비교, 할당, 더하기 빼기와 같은 사칙연산 등 이 모든 것이 기본연산자에 포함된다.
스위프트는 C에서 제공하는 연산자 기능을 기본 베이스로 제공함과 동시에 기존 C에서는 제공하지 않는 a..<b 그리고 a...b와 같은 범위연산자를 제공한다. (a..<b 는 'a 이상 b 미만'이라는 뜻이고, a...b는 'a 이상 b이하'라는 뜻이다.)
그리하여 기본 연산자(Basic Operator) docs에서 제공하는 내용은 위의 내용을 포함하는 여러가지 연산자들에 대한 정보다. docs는 Basic 뿐만 아니라 심화 연산자(Advanced Opearator)에 관한 내용도 docs로 제공하고 있다.
연산자는 단항(unary), 이항(binary), 삼항(ternary) 세가지로 나뉜다.
내용은 다음과 같이 정리할 수 있다.
- 단항(unary) : -a, !b, c!와 같이 하나의 대상에 앞뒤에 바로 붙여 사용하는 연산자
- 이항(binary) : 2 + 3 같이 두 대상 사이에 위치하는 연산자
- 삼항(ternary) : a ? b : c 형태로 스위프트에 삼항연산자는 이 연산자 단 하나만 존재
할당 연산자(Assignment Operator)는 특정 값을 할당해주기 위해 사용한다.
- 할당 연산자는 값을 초기화 시키거나 변경한다.
- let b = 10 // 상수 b에 10을 할당했다.
- var a = 5 // 변수 a에 5를 할당했다.
- a = b // 변수 a에 상수 b를 할당했다.(=> 변수 a에 상수 b의 값 10을 할당했다. => a는 10의 값을 갖는다.)
다중으로 할당도 가능하다.
- let (x, y) = (1, 2)
할당 연산자는 값을 반환하지 않는다.
- 동등 비교 연산자(==)를 사용해야 하는 곳에 할당 연산자(=)가 실수로 사용되는 것을 막기 위하여
사칙 연산자(Arithmetic Operators)는 '+', '-', '*', '/' 이 4가지 연산자에 대한 내용이다.
이 부분에서 짚고 넘어가야할 사항은 '/' 나누기로 쓰이는 이 기호는 '값'에만 신경쓰고 '나머지'에 대해서는 신경쓰지 않는다는 점이다.
그리하여 위와 같이 나머지 연산자(Remainder Operator)를 따로 사용하고 있다.
다음으로는 단항 음수 연산자, 단항 양수 연산자이다.
이는 아래처럼 하나의 항에 음수와 양수를 구분하여 사용할 수 있음을 나타낸다.
- let three = 3 // 양수
- let minusThree = -three // 음수
- let plusThree = -minusThree // 양수
- let minusSix = -6 // 음수
- let alsoMinusSix = +minusSix // 음수
합성 할당 연산자(Compound Assignment Operators)의 경우 상수 혹은 변수가 중복으로 쓰이는 것을 피하기 위해 사용한다.
a = a + 2와 같이 할당 연산(=)과 덧셈 연산(+)으로 구성된 연산을 합성해 += 형태로 축약하여 사용하는 것이다.
- var a = 1
- a += 2
- 합성 할당 연산자는 값을 반환하지 않는다.
- 즉, let b = a += 2와 같은 문법은 사용할 수 없다.
비교 연산자(Comparison Operators)는 할당 연산과 약간 헷갈릴 수 있다.
할당은 값을 넣는 것, 비교는 말 그대로 값들끼리 비교하는 것이라고 생각하면 된다.
위의 사진에 나오는 내용처럼 1과 1의 비교, 2와 1의 비교 등을 진행할 수도 있고,
아래와 같이 튜플(열거)간의 비교도 가능하다.
- (1, “zebra”) < (2, “apple) // 1이 2보다 작아서, true
- (3, “apple”) < (3, “bird”) // 3은 동일, 문자 비교로 넘어감, a와 b를 비교시 b가 값이 더 큼, true
- (4, “dog”) == (4, “dog”) // 4는 동일, 문자도 동일, true
- (“blue”, -1) < (“purple”, 1) // b보다 p가 값이 더 큼, True
- (“blue”, false) < (“purple”, true) // false, boolean 값은 상하관계로 나타낼 수 없음
삼항 조건 연산자(Ternary Conditional Operator)는 if else 구문을 간결하게 쓴다고 생각하면 된다.
만약 "question"이 사실이면 Answer1을 값으로, 거짓이면 answer2를 값으로 갖는다.
- question ? answer1 : answer2
- question 조건이 참인 경우 answer1, 아닌 경우 answer2
- 전형적인 if else 문인데 가독성을 위하여 사용
Nil 병합 연산자(Nil-Coalescing Operator)는 a ?? b 형태를 갖는 연산자다.
옵셔널 a를 벗겨서(unwraps) 만약 a가 nil인 경우 b를 반환한다.
즉, 값을 갖고 있는지 없는지 모르는 옵셔널 a를 강제로 실행시킬 경우, a에 값이 없다면 오류가 날 수 있다.
이 때, 오류가 나는 것을 대비하여 b를 값으로 반환한다는 것이다.
- a != nil ? a! : b
- let defaultColorName = "red"
- var userDefinedColorName: String? // 이 값은 defaults 값 nil이다.
- var colorNameToUse = userDefinedColorName ?? defaultColorName // userDefinedColorName이 nil이므로 colorNameToUse 값은 defaultColorName인 red가 설정된다.
- userDefinedColorName = "green"
- colorNameToUse = userDefinedColorName ?? defaultColorName // userDefinedColorName가 nil이 아니므로 colorNameToUse 는 green이 된다.
범위 연산자(Range Operators)는 약간의 표현의 차이가 있지만 <, <= 등의 기존 기호와 일치하는 것이 대부분이다.
- 닫힌 범위 연산자(Closed Range Operator)
- 1…5 ("1 이상, 5 이하")
- 반 닫힌 범위 연산자(Half-Open Range Operator)
- 0..<count ("0 이상, count 미만")
- 단방향 범위(One-Side Ranges)
- [a..], [..a]의 형태로 범위의 시작 혹은 끝만 지정해 사용하는 범위 연산자.
- 지정한 시작 값 혹은 끝 값은 범위에 포함됨.
- [..<2] 반 닫힌 연산자는 설정 값이 범위에 포함되지 않음.
논리 연산자(Logical Operators)는 AND, OR의 개념으로 AND의 경우 모든 경우가 true여야 true를 값으로 반환하고, OR의 경우 하나라도 true가 나온다면 값을 true로 반환한다.
- 논리 부정 NOT(!a)
- let allowedEntry = false
- if !allowedEntry { print("ACCESS DENIED") }
- 논리 곱 AND (a && b)
- and로 묶일 경우 둘다 true이어야 true 반환
- 논리 합 OR (a || b)
- 둘 중 하나만 true이어도 true
논리 연산자의 조합(Combining Logical Operators)
논리 연산자의 경우 앞에서부터 차례대로 계산된다. true && false -> false, false || false -> false, false || true -> true
이와 같은 순서로 값이 결정되고, 결국 true로 값이 반환되어 print("Welcome!")이 실행된다.
if true && false || false || true {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints “Welcome!"
출처 : docs.swift.org