Swift 곡μ λ¬Έμ μ 리 - κΈ°λ³Έ μ°μ°μ (Basic Operators)
μλ νμΈμ μ€λμ 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-κ²°ν© μ°μ°μ λ±μ λ μμ νκ³ μ½κΈ° μ¬μ΄ μ½λλ₯Ό μμ±νλ λ° λμμ΄ λ©λλ€.