์๋ ํ์ธ์ ์ค๋์ Swift ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ณธ ์ฐ์ฐ์์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ฐ์๋ Swift์์ ๊ฐ์ ์กฐ์ํ๊ณ ๊ณ์ฐํ๋ ๋ฐ ํ์์ ์ธ ์์์ ๋๋ค.
๐ ์ฐ์ฐ์๋ ๋ฌด์์ธ๊ฐ?
์ฐ์ฐ์(Operator)๋ ๊ฐ์ ์ฒดํฌ, ๋ณ๊ฒฝ, ๋๋ ๊ฒฐํฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐํธ๋ ๊ตฌ๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
- ๋ง์ ์ฐ์ฐ์(+)๋ ๋ ์ซ์๋ฅผ ๋ํฉ๋๋ค: let i = 1 + 2
- ๋ ผ๋ฆฌ AND ์ฐ์ฐ์(&&)๋ ๋ ๋ถ์ธ ๊ฐ์ ๊ฒฐํฉํฉ๋๋ค: if enteredDoorCode && passedRetinaScan
Swift์ ์ฐ์ฐ์๋ C์ ์ ์ฌํ์ง๋ง ๋ช ๊ฐ์ง ์ค์ํ ๊ฐ์ ์ฌํญ์ด ์์ต๋๋ค:
- ๋์ ์ฐ์ฐ์(=)๋ ๊ฐ์ ๋ฐํํ์ง ์์ ์ค์๋ก ๋น๊ต ์ฐ์ฐ์(==) ๋์ ์ฌ์ฉํ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค
- ์ฐ์ ์ฐ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค
๐ ์ฐ์ฐ์์ ์ข ๋ฅ (์ ์ด)
Swift์ ์ฐ์ฐ์๋ ์์ฉํ๋ ํผ์ฐ์ฐ์์ ์์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅ๋ฉ๋๋ค:
1. ๋จํญ ์ฐ์ฐ์ (Unary Operators)
๋จ์ผ ๋์์ ์์ฉํ๋ ์ฐ์ฐ์์ ๋๋ค.
- ๋จํญ ์ ๋์ฌ ์ฐ์ฐ์: ๋์ ์์ ์์น (์: -a, !b)
- ๋จํญ ์ ๋ฏธ์ฌ ์ฐ์ฐ์: ๋์ ๋ค์ ์์น (์: c!)
2. ์ดํญ ์ฐ์ฐ์ (Binary Operators)
๋ ๋์ ์ฌ์ด์ ์์นํ๋ ์ฐ์ฐ์์ ๋๋ค (์: a + b).
3. ์ผํญ ์ฐ์ฐ์ (Ternary Operators)
์ธ ๋์์ ์์ฉํ๋ ์ฐ์ฐ์์ ๋๋ค. Swift์๋ ํ๋์ ์ผํญ ์ฐ์ฐ์์ธ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์(a ? b : c)๋ง ์์ต๋๋ค.
๐ ๋์ ์ฐ์ฐ์ (Assignment Operator)
๋์ ์ฐ์ฐ์(=)๋ ๊ฐ์ ๋ณ์์ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค:
let b = 10
var a = 5
a = b // a๋ ์ด์ 10
์ฌ๋ฌ ๊ฐ์ ํ ๋ฒ์ ๋์ ํ๋ ํํ ๋ถํด๋ ๊ฐ๋ฅํฉ๋๋ค:
let (x, y) = (1, 2)
// x๋ 1, y๋ 2
์ฃผ์์ : Swift์ ๋์ ์ฐ์ฐ์๋ C์ ๋ฌ๋ฆฌ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. ์ฆ, if x = y {}์ ๊ฐ์ ์ฝ๋๋ ์ ํจํ์ง ์์ต๋๋ค. ์ด๋ ๋ฑํธ ์ฐ์ฐ์(==)์ ๋์ ์ฐ์ฐ์(=)๋ฅผ ํผ๋ํ๋ ์ค์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๐ ์ฐ์ ์ฐ์ฐ์ (Arithmetic Operators)
Swift๋ ๋ชจ๋ ์ซ์ ํ์ ์ ๋ํด ๋ค ๊ฐ์ง ๊ธฐ๋ณธ ์ฐ์ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค:
1 + 2 // ๋ง์
: 3
5 - 3 // ๋บ์
: 2
2 * 3 // ๊ณฑ์
: 6
10.0 / 2.5 // ๋๋์
: 4.0
ํน์ง: Swift์ ์ฐ์ ์ฐ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์ค๋ฒํ๋ก์ฐ ์ฐ์ฐ์(&+, &-, &* ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ ์ฐ์ฐ์๋ ๋ฌธ์์ด ์ฐ๊ฒฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค:
"hello, " + "world" // "hello, world"
๐ ๋๋จธ์ง ์ฐ์ฐ์ (Remainder Operator)
๋๋จธ์ง ์ฐ์ฐ์(%)๋ ๋๋์ ํ ๋๋จธ์ง๋ฅผ ๊ณ์ฐํฉ๋๋ค:
9 % 4 // 1
-9 % 4 // -1
์๋ ๋ฐฉ์: a % b๋ a = (b ร ๋ชซ) + ๋๋จธ์ง์์ '๋๋จธ์ง'๋ฅผ ๋ฐํํฉ๋๋ค. ๋ค๋ฅธ ์ธ์ด์ ๋ชจ๋๋ก ์ฐ์ฐ์์ ๋ฌ๋ฆฌ, Swift์์๋ ์์์ ๋ํด ๋๋จธ์ง๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๐ ๋จํญ ์ฐ์ฐ์ (Unary Operators)
๋จํญ ๋บ์ ์ฐ์ฐ์ (Unary Minus Operator)
์ซ์์ ๋ถํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค:
let three = 3
let minusThree = -three // -3
let plusThree = -minusThree // 3
๋จํญ ๋ง์ ์ฐ์ฐ์ (Unary Plus Operator)
๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค:
let minusSix = -6
let alsoMinusSix = +minusSix // -6
์ฉ๋: ์ค์ง์ ์ธ ์์ ์ ์ํํ์ง ์์ง๋ง, ๋จํญ ๋บ์ ๊ณผ์ ๋์นญ์ฑ์ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ ๋ณตํฉ ๋์ ์ฐ์ฐ์ (Compound Assignment Operators)
๋์ ์ฐ์ฐ์์ ๋ค๋ฅธ ์ฐ์ฐ์๋ฅผ ๊ฒฐํฉํ ๊ฒ์ผ๋ก, ์์ ์ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํฉ๋๋ค:
var a = 1
a += 2 // a = a + 2์ ๋์ผ, a๋ ์ด์ 3
์ฐธ๊ณ : ๋ณตํฉ ๋์ ์ฐ์ฐ์๋ ๊ฐ์ ๋ฐํํ์ง ์์ผ๋ฏ๋ก let b = a += 2์ ๊ฐ์ ํํ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๐ ๋น๊ต ์ฐ์ฐ์ (Comparison Operators)
๋ ๊ฐ์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ธ ๊ฐ์ผ๋ก ๋ฐํํฉ๋๋ค:
1 == 1 // ๊ฐ์: true
2 != 1 // ๋ค๋ฆ: true
2 > 1 // ๋ณด๋ค ํผ: true
1 < 2 // ๋ณด๋ค ์์: true
1 >= 1 // ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์: true
2 <= 1 // ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์: false
๊ฐ์ ํ์ ์ ํํ๋ ๋น๊ตํ ์ ์์ต๋๋ค:
(1, "zebra") < (2, "apple") // true (1์ด 2๋ณด๋ค ์๊ธฐ ๋๋ฌธ)
(3, "apple") < (3, "bird") // true (3์ ๊ฐ์ง๋ง, "apple"์ด "bird"๋ณด๋ค ์์)
(4, "dog") == (4, "dog") // true (๋ชจ๋ ์์๊ฐ ๊ฐ์)
ํํ ๋น๊ต ๊ท์น: ํํ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์์์ฉ ๋น๊ตํฉ๋๋ค. ๋ ๊ฐ์ด ๋ค๋ฅด๋ฉด ๊ทธ ๋น๊ต ๊ฒฐ๊ณผ๊ฐ ์ ์ฒด ํํ ๋น๊ต์ ๊ฒฐ๊ณผ๊ฐ ๋ฉ๋๋ค.
๐ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์ (Ternary Conditional Operator)
์ธ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง ํน๋ณํ ์ฐ์ฐ์๋ก, ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ํํ์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค:
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight๋ 90
๊ตฌ๋ฌธ: condition ? value1 : value2 ์กฐ๊ฑด์ด true๋ฉด value1์, false๋ฉด value2๋ฅผ ๋ฐํํฉ๋๋ค.
๐ Nil-๊ฒฐํฉ ์ฐ์ฐ์ (Nil-Coalescing Operator)
์ต์ ๋ ๊ฐ์ด nil์ผ ๋ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ์ฐ์ฐ์์ ๋๋ค:
let defaultColorName = "red"
var userDefinedColorName: String? // nil๋ก ์ด๊ธฐํ๋จ
let colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName์ด nil์ด๋ฏ๋ก "red"๊ฐ ์ฌ์ฉ๋จ
๊ตฌ๋ฌธ: a ?? b a๊ฐ nil์ด ์๋๋ฉด ์ธ๋ํ๋ a๋ฅผ ๋ฐํํ๊ณ , nil์ด๋ฉด b๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ a != nil ? a! : b์ ์ถ์ฝํ์ ๋๋ค.
๐ ๋ฒ์ ์ฐ์ฐ์ (Range Operators)
๋ซํ ๋ฒ์ ์ฐ์ฐ์ (Closed Range Operator)
for index in 1...5 {
print("\(index) ร 5 = \(index * 5)")
}
// 1 ร 5 = 5๋ถํฐ 5 ร 5 = 25๊น์ง ์ถ๋ ฅ
๊ตฌ๋ฌธ: a...b a๋ถํฐ b๊น์ง์ ๋ชจ๋ ๊ฐ์ ํฌํจํ๋ ๋ฒ์๋ฅผ ์ ์ํฉ๋๋ค(a์ b ๋ชจ๋ ํฌํจ).
๋ฐ-์ด๋ฆผ ๋ฒ์ ์ฐ์ฐ์ (Half-Open Range Operator)
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1): \(names[i])")
}
// Person 1: Anna๋ถํฐ Person 4: Jack๊น์ง ์ถ๋ ฅ
๊ตฌ๋ฌธ: a..<b a๋ถํฐ b-1๊น์ง์ ๊ฐ์ ํฌํจํ๋ ๋ฒ์๋ฅผ ์ ์ํฉ๋๋ค(a๋ ํฌํจํ์ง๋ง b๋ ์ ์ธ).
๋จ-๋ฐฉํฅ ๋ฒ์ (One-Sided Ranges)
๋ฒ์์ ํ์ชฝ ๋๋ง ์ง์ ํ๋ ๋ฐฉ์์ ๋๋ค:
// 2๋ฒ ์ธ๋ฑ์ค๋ถํฐ ๋๊น์ง
for name in names[2...] {
print(name)
}
// Brian, Jack ์ถ๋ ฅ
// ์ฒ์๋ถํฐ 2๋ฒ ์ธ๋ฑ์ค๊น์ง
for name in names[...2] {
print(name)
}
// Anna, Alex, Brian ์ถ๋ ฅ
// ์ฒ์๋ถํฐ 2๋ฒ ์ธ๋ฑ์ค ์ ๊น์ง
for name in names[..<2] {
print(name)
}
// Anna, Alex ์ถ๋ ฅ
๊ตฌ๋ฌธ:
- a...: a๋ถํฐ ๋๊น์ง์ ๋ฒ์
- ...b: ์ฒ์๋ถํฐ b๊น์ง์ ๋ฒ์(b ํฌํจ)
- ..<b: ์ฒ์๋ถํฐ b-1๊น์ง์ ๋ฒ์(b ์ ์ธ)
๐ ๋ ผ๋ฆฌ ์ฐ์ฐ์ (Logical Operators)
๋ถ์ธ ๊ฐ์ ์กฐ์ํ๋ ์ฐ์ฐ์๋ก, ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค:
๋ ผ๋ฆฌ์ NOT ์ฐ์ฐ์ (!)
๋ถ์ธ ๊ฐ์ ๋ฐ์ ์ํต๋๋ค:
let allowedEntry = false
if !allowedEntry {
print("์ถ์
๊ธ์ง")
}
// "์ถ์
๊ธ์ง" ์ถ๋ ฅ
๊ธฐ๋ฅ: true๋ฅผ false๋ก, false๋ฅผ true๋ก ๋ณํํฉ๋๋ค.
๋ ผ๋ฆฌ์ AND ์ฐ์ฐ์ (&&)
๋ ์กฐ๊ฑด์ด ๋ชจ๋ true์ผ ๋๋ง true๋ฅผ ๋ฐํํฉ๋๋ค:
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("ํ์ํฉ๋๋ค!")
} else {
print("์ถ์
๊ธ์ง")
}
// "์ถ์
๊ธ์ง" ์ถ๋ ฅ
ํน์ง: ์ฒซ ๋ฒ์งธ ๊ฐ์ด false๋ฉด ๋ ๋ฒ์งธ ๊ฐ์ ํ๊ฐํ์ง ์์ต๋๋ค(๋จ๋ฝ ํ๊ฐ).
๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์ (||)
๋ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ true๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค:
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("ํ์ํฉ๋๋ค!")
} else {
print("์ถ์
๊ธ์ง")
}
// "ํ์ํฉ๋๋ค!" ์ถ๋ ฅ
ํน์ง: ์ฒซ ๋ฒ์งธ ๊ฐ์ด true๋ฉด ๋ ๋ฒ์งธ ๊ฐ์ ํ๊ฐํ์ง ์์ต๋๋ค(๋จ๋ฝ ํ๊ฐ).
๋ ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐํฉ ๋ฐ ๋ช ์์ ์๊ดํธ
์ฌ๋ฌ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ๊ฒฐํฉํด ๋ณต์กํ ์กฐ๊ฑด์ ํํํ ์ ์์ต๋๋ค:
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("ํ์ํฉ๋๋ค!")
} else {
print("์ถ์
๊ธ์ง")
}
๊ฐ๋ ์ฑ ํฅ์: ์๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณตํฉ ํํ์์ ์๋๋ฅผ ๋ช ํํ ํ ์ ์์ต๋๋ค. ๋ ผ๋ฆฌ์ AND(&&)์ OR(||) ์ฐ์ฐ์๋ ์ผ์ชฝ๋ถํฐ ํ๊ฐ๋ฉ๋๋ค.
์ฐ์ฐ์๋ Swift ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ์์๋ก, ๋ค์ํ ๊ฐ ์กฐ์์ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๊ฒ ํด์ค๋๋ค. ํนํ Swift๋ง์ ํน์ง์ธ ์ค๋ฒํ๋ก์ฐ ๋ฐฉ์ง, ๋ฒ์ ์ฐ์ฐ์, nil-๊ฒฐํฉ ์ฐ์ฐ์ ๋ฑ์ ๋ ์์ ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
'๐ฅ Bread Basics > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํด๋ก์ (Closures) (0) | 2025.04.11 |
---|---|
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํจ์ (Functions) (0) | 2025.04.11 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ ์ด ํ๋ฆ (Control Flow) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ปฌ๋ ์ ํ์ (Collection Types) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๋ฌธ์์ด๊ณผ ๋ฌธ์ (Strings and Characters) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ธฐ๋ณธ(The Basics)(2/2) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ธฐ๋ณธ(The Basics)(1/2) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - A Swift Tour (0) | 2025.04.10 |