Basic Operators
์ฐ์ฐ์(operator)๋ ๊ฐ์ ์ฒดํฌ,๋ณ๊ฒฝ,๋๋ ๊ฒฐํฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐํธ ๋๋ ๊ตฌ(ๅฅ)์ด๋ค.
์ ์ด (Terminology)
- ๋จํญ ์ฐ์ฐ์: -a, !b
- ์ดํญ ์ฐ์ฐ์: 2 + 3, 3 * 4
- ์ผํญ ์ฐ์ฐ์: (a ? b : c) a๊ฐ ์ฐธ์ด๋ฉด b ์๋๋ฉด c
๋์ ์ฐ์ฐ์ (Assignment Operator)
(a = b) ๋ b ์ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ ๋๋ค.
let b = 10
var a = 5
a = b
// a is now equal to 10
NOTEโ๏ธ
if x = y ๊ฐ ์ ํจํ์ง ์๋ ๊ฒ์ฒ๋ผ Swift์์๋ ๋ฑํธ ์ฐ์ฐ์(==)๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋์ด์ผ ํ ๊ณณ์ ์ค์๋ก ํ ๋น ์ฐ์ฐ์(=)๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์ง ํ ์ ์๋ค.
์ฐ์ ์ฐ์ฐ์ (Arithmetic Operators)
Swift๋ ๋ชจ๋ ์ซ์ ํ์ ์ ๋ํด 4๊ฐ์ ๊ธฐ๋ณธ ์ฐ์ ์ฐ์ฐ์ (arithmetic operators) ๋ฅผ ์ ๊ณตํ๋ค.
- ๋ง์ (+)
- ๋บ์ (-)
- ๊ณฑ์ (*)
- ๋๋์ (/)
๋๋จธ์ง ์ฐ์ฐ์ (Remainder Operator)
(a % b)๋ a ์์ ๋ค์ด๊ฐ b ์ ๋ฐฐ์๊ฐ ๋ช์ธ์ง๋ฅผ ๊ณ์ฐํ๊ณ ๋จ์ ๊ฐ (๋๋จธ์ง)์ ๋ฐํํ๋ค. ex) 9 % 4 ๋ ๋๋จธ์ง 1์ ๋ฐํ
๋จํญ ๋นผ๊ธฐ ์ฐ์ฐ์(Unary Minus Operator)
์ซ์ ๊ฐ์ ๋ถํธ๋ - ์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์ด๊ฒ์ ๋จํญ ๋นผ๊ธฐ ์ฐ์ฐ์ (unary minus operator) ๋ผ๊ณ ํ๋ค.
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
๋ณตํฉ ๋์ ์ฐ์ฐ์ (Compound Assignment Operators)
var a = 1
a += 2
// a is now equal to 3
ํํ์ a += 2 ๋ a = a + 2 ์ ์งง์ ํํ์ด๋ค. ํจ๊ณผ์ ์ผ๋ก ๋ง์ ๊ณผ ๋์ ์ ๋์์ ์ํ๋๊ณ ํ๋์ ์ฐ์ฐ์๋ก ๊ฒฐํฉ๋๋ค.
๋น๊ต ์ฐ์ฐ์ (Comparison Operators)
- ๊ฐ์ (a == b)
- ๋ค๋ฆ (a != b)
- ๋ณด๋ค ํผ (a > b)
- ๋ณด๋ค ์์ (a < b)
- ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ (a >= b)
- ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ (a <= b)
๊ฐ ๋น๊ต ์ฐ์ฐ์๋ Bool ๊ฐ์ ๋ฐํํ๋ค.
1 == 1 // true because 1 is equal to 1
2 != 1 // true because 2 is not equal to 1
2 > 1 // true because 2 is greater than 1
1 < 2 // true because 1 is less than 2
1 >= 1 // true because 1 is greater than or equal to 1
2 <= 1 // false because 2 is not less than or equal to 1
๊ฐ์ ํ์ ๊ณผ ๊ฐ์ ๊ฐฏ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ 2๊ฐ์ ํํ์ ๋น๊ตํ ์ ์๋ค. ์ผ์ชฝ๋ถํฐ ํ๋ฒ์ ํ๋์ฉ ๋น๊ต ํ๋ค.
(1, "zebra") < (2, "apple") // true because 1 is less than 2; "zebra" and "apple" are not compared
(3, "apple") < (3, "bird") // true because 3 is equal to 3, and "apple" is less than "bird"
(4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"
๋ฒ์ ์ฐ์ฐ์ (Range Operators)
๋ฒ์๋ฅผ ์งง๊ฒ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ซํ ๋ฒ์ ์ฐ์ฐ์ (Closed Range Operator)
(a...b)๋ ๊ฐ a ์ b ๊ฐ ํฌํจ๋ a ๋ถํฐ b ๊น์ง์ ๋ฒ์ ์คํ์ ์๋ฏธํ๋ค. a ์ ๊ฐ์ b ๋ณด๋ค ํด ์ ์๋ค.
๋ฐ-์ด๋ฆผ ๋ฒ์ ์ฐ์ฐ์ (Half-Open Range Operator)
(a..<b)๋ b ๊ฐ ํฌํจ๋์ง ์์ a ๋ถํฐ b ๊น์ง์ ๋ฒ์ ์คํ์ ์๋ฏธํ๋ค. ์ด๊ฒ์ ๋ง์ง๋ง ๊ฐ์ ํฌํจ๋์ง ์์ง๋ง ์ฒ์ ๊ฐ์ ํฌํจ๋๋ฏ๋ก ๋ฐ-์ด๋ฆผ (half-open) ์ด๋ผ ํ๋ค. ๋ซํ ๋ฒ์ ์ฐ์ฐ์์ ๊ฐ์ด a ์ ๊ฐ์ b ๋ณด๋ค ํด ์ ์๋ค.
๋จ-๋ฐฉํฅ ๋ฒ์ (One-Sided Ranges)
๋ซํ ๋ฒ์ ์ฐ์ฐ์๋ ํ๋ฐฉํฅ์ผ๋ก ๊ณ์๋๋ ๋ฒ์์ ๋ํ ๋์ฒด ํ์์ด๋ค. ์ด๋ฌํ ๋ฒ์์ ์ข ๋ฅ๋ ์ฐ์ฐ์๊ฐ ์ค์ง ํ์ชฝ์ ๊ฐ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋จ-๋ฐฉํฅ ๋ฒ์ (one-sided range) ๋ผ๊ณ ํ๋ค.
for name in names\[2...\] {
print(name)
}
// Brian
// Jack
for name in names\[...2\] {
print(name)
}
// Anna
// Alex
// Brian
๋ ผ๋ฆฌ ์ฐ์ฐ์ (Logical Operators)
- ๋ ผ๋ฆฌ์ NOT (!a)
- ๋ ผ๋ฆฌ์ AND (a && b)
- ๋ ผ๋ฆฌ์ OR (a || b)
๋ ผ๋ฆฌ์ NOT ์ฐ์ฐ์ (Logical NOT Operator)
๋ ผ๋ฆฌ์ NOT ์ฐ์ฐ์ (logical NOT operator) (!a)๋ ๋ถ์ธ ๊ฐ์ true ๋ฅผ false ๋ก false ๋ฅผ true ์ ๊ฐ์ด ๋ฐ๋๋ก ๋ง๋ ๋ค.
๋ ผ๋ฆฌ์ AND ์ฐ์ฐ์ (Logical AND Operator)
๋ ผ๋ฆฌ์ AND ์ฐ์ฐ์ (logical AND operator) (a && b)๋ ๋ ๊ฐ์ด ๋ชจ๋ true ์ฌ์ผ true ๋ฅผ ํํํ๋ ๋ ผ๋ฆฌ์ ํํ์์ ๋ง๋ ๋ค.
๋ ๊ฐ์ค ํ๋๋ผ๋ false ์ด๋ฉด false๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋์ ์ฒซ๋ฒ์งธ ๊ฐ์ด false ์ด๋ฉด true์ ๊ฐ์ ๋ณผ ํ์๋ ์์ด ์ป์ ์ ์์ผ๋ฏ๋ก ๋๋ฒ์งธ ๊ฐ์ ๋ณด์ง ์๋๋ค. ์ด ๊ฒฝ์ฐ๋ฅผ ์ฐ์ฐ ์๋ต(short-circuit evaluation)์ด๋ผ ํ๋ค.
๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์ (Logical OR Operator)
๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์ (logical OR operator) (a || b)๋ 2๊ฐ์ ์ธ์ ํ ํ์ดํ ๋ฌธ์๋ก ๋ง๋ค์ด์ง ์ฝ์ ์ฐ์ฐ์์ด๋ค. ์ด๊ฒ์ ์ฌ์ฉํ์ฌ 2๊ฐ์ ๊ฐ ์ค ํ๋๋ผ๋ true ์ด๋ฉด ํํ์์ด true ๊ฐ ๋๋ ๋ ผ๋ฆฌ์ ํํ์์ ๋ง๋ ๋ค.
์์ AND ์ฐ์ฐ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์๋ ์ฐ์ฐ ์๋ต (short-circuit evaluation)์ ์ฌ์ฉํ์ฌ ํํ์์ ๋ํ๋ธ๋ค. ๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์์ ์ข๋ณ์ด true ์ด๋ฉด ํํ์์ ๊ฒฐ๊ณผ๋ ๋ฐ๋์ง ์์ผ๋ฏ๋ก ์ฐ๋ณ์ ๊ณ ๋ คํ์ง ์๋๋ค.
๋ ผ๋ฆฌ์ ์ฐ์ฐ์ ๊ฒฐํฉ (Combining Logical Operators)
๊ธด ๋ณตํฉ ํํ์์ ์์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ ๋ ผ๋ฆฌ์ ์ฐ์ฐ์๋ฅผ ๊ฒฐํฉํ ์ ์๋ค.
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
NOTEโ๏ธ
Swift ๋ ผ๋ฆฌ์ ์ฐ์ฐ์ && ์ || ์ ์ผ์ชฝ ์ฐ์ ๊ฒฐํฉ (left-associative) ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ๋ฌ๊ฐ์ ๋ ผ๋ฆฌ์ ์ฐ์ฐ์๋ก ์ด๋ฃจ์ด์ง ๋ณตํฉ ํํ์์ ๊ฐ์ฅ ์ผ์ชฝ๋ถํฐ ํ๋จํ๋ค.
๋ช ์์ ์๊ดํธ (Explicit Parentheses)
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
์๋๋ฅผ ๋ช ํํ ํด์ฃผ๊ธฐ ์ํด ์๊ดํธ๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค. ๊ฐ๋ ์ฑ ๋ํ ์ฌ๋ผ๊ฐ๋ค.