μλ νμΈμ. μ€λμ Swiftμ 'μλΈμ€ν¬λ¦½νΈ(Subscripts)'μ λν΄ μμλ³΄κ² μ΅λλ€. λ°°μ΄μ΄λ λμ λ리 κ°μ 컬λ μ μμμ μ κ·Όν λ λ§μ΄ μ¬μ©νλ κΈ°λ₯μΈλ°μ, μ€μ λ‘ μ΄ κΈ°λ₯μ μ§μ ꡬννλ λ°©λ²μ λν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
π μλΈμ€ν¬λ¦½νΈλ?
μλΈμ€ν¬λ¦½νΈλ ν΄λμ€, ꡬ쑰체, μ΄κ±°νμμ 컬λ μ , 리μ€νΈ, μνμ€μ μμμ κ°νΈνκ² μ κ·Όν μ μκ² ν΄μ£Όλ νΉλ³ν κΈ°λ₯μ λλ€. λ°°μ΄μμ array[index]λ λμ λ리μμ dictionary[key]μ²λΌ λκ΄νΈλ₯Ό μ¬μ©ν΄ μμμ μ κ·Όνλ κ²μ΄ λ°λ‘ μλΈμ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ μμ λλ€.
μλΈμ€ν¬λ¦½νΈ(Subscript): λ³λμ λ©μλ μμ΄ μΈλ±μ€λ ν€λ₯Ό ν΅ν΄ 컬λ μ μ μμμ μ κ·Όν μ μκ² ν΄μ£Όλ νΉλ³ν λ¬Έλ²
π μλΈμ€ν¬λ¦½νΈ ꡬ문 (Subscript Syntax)
μλΈμ€ν¬λ¦½νΈλ₯Ό μ μνλ λ¬Έλ²μ λ€μκ³Ό κ°μ΅λλ€:
subscript(index: Int) -> Int {
get {
// μ μ ν κ°μ λ°ν
}
set(newValue) {
// μ μ ν μ€μ μμ
μν
}
}
μλΈμ€ν¬λ¦½νΈλ μ½κΈ° μ μ©(read-only)μΌλ‘ λ§λ€ μλ μμ΅λλ€:
subscript(index: Int) -> Int {
// μ μ ν κ°μ λ°ν
}
getterμ setter: κ³μ° νλ‘νΌν°μ λ§μ°¬κ°μ§λ‘ μλΈμ€ν¬λ¦½νΈλ getterμ setterλ₯Ό κ°μ§ μ μμΌλ©°, μ½κΈ° μ μ© μλΈμ€ν¬λ¦½νΈλ get λΈλ‘μ μλ΅ν μ μμ΅λλ€.
μ€μ μμ : κ³±μ ν μ΄λΈ
λ€μμ μ μμ nλ°° ν μ΄λΈμ ꡬννλ κ°λ¨ν μμ μ λλ€:
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// μΆλ ₯: "six times three is 18"
μ΄ μμ μμ threeTimesTable[6]μ 3μ 6λ°°μΈ 18μ λ°νν©λλ€. μλΈμ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ λ°°μ ν μ΄λΈμ κ°μ κ°λ¨νκ² μ‘°νν μ μμ΅λλ€.
μ½κΈ° μ μ© μλΈμ€ν¬λ¦½νΈ: μ μμ μ μλΈμ€ν¬λ¦½νΈλ κ°μ λ°νλ§ νκ³ μ€μ μ ν μ μλ μ½κΈ° μ μ© μλΈμ€ν¬λ¦½νΈμ λλ€.
π μλΈμ€ν¬λ¦½νΈ μ¬μ© (Subscript Usage)
μλΈμ€ν¬λ¦½νΈλ 컨ν μ€νΈμ λ°λΌ λ€μνκ² μ¬μ©λ μ μμ΅λλ€. Swiftμ νμ€ λΌμ΄λΈλ¬λ¦¬μμλ λ°°μ΄κ³Ό λμ λλ¦¬κ° μλΈμ€ν¬λ¦½νΈλ₯Ό νμ©νλ λνμ μΈ μμ λλ€.
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2 // λμ
λ리μ μ ν€-κ° μ μΆκ°
μ΄ μμ μμλ λμ λ리μ μλΈμ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ μλ‘μ΄ ν€-κ° μ("bird": 2)μ μΆκ°νκ³ μμ΅λλ€.
Dictionary μλΈμ€ν¬λ¦½νΈ: Swiftμ Dictionary νμ μ μ΅μ λ κ°μ λ°ννλ μλΈμ€ν¬λ¦½νΈλ₯Ό ꡬνν©λλ€. μ΄λ λͺ¨λ ν€μ κ°μ΄ μμ§ μμ μ μμμ νννκΈ° μν¨μ λλ€.
π μλΈμ€ν¬λ¦½νΈ μ΅μ (Subscript Options)
μλΈμ€ν¬λ¦½νΈλ μ¬λ¬ κ°μ§ λ°©μμΌλ‘ νμ₯ κ°λ₯ν©λλ€:
- μ¬λ¬ νλΌλ―Έν° μ¬μ©: μλΈμ€ν¬λ¦½νΈλ μ¬λ¬ κ°μ νλΌλ―Έν°λ₯Ό κ°μ§ μ μμ΅λλ€.
- λ€μν νμ : νλΌλ―Έν°μ λ°ν κ°μ μ΄λ€ νμ λ κ°λ₯ν©λλ€.
- κ°λ³ νλΌλ―Έν°μ κΈ°λ³Έκ°: ν¨μμ²λΌ κ°λ³ νλΌλ―Έν°μ κΈ°λ³Έκ°μ μ§μν©λλ€.
- μ€λ²λ‘λ©: κ°μ νμ μ μ¬λ¬ μλΈμ€ν¬λ¦½νΈλ₯Ό μ μν μ μμ΅λλ€.
λ€μ€ νλΌλ―Έν° μλΈμ€ν¬λ¦½νΈ μμ : νλ ¬
λ€μ μμ λ 2μ°¨μ νλ ¬μ νννλ ꡬ쑰체μμ λ κ°μ νλΌλ―Έν°λ₯Ό κ°μ§ μλΈμ€ν¬λ¦½νΈλ₯Ό ꡬνν©λλ€:
struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(repeating: 0.0, count: rows * columns)
}
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValid(row: row, column: column), "μΈλ±μ€κ° λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€")
return grid[(row * columns) + column]
}
set {
assert(indexIsValid(row: row, column: column), "μΈλ±μ€κ° λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€")
grid[(row * columns) + column] = newValue
}
}
}
νλ ¬ μμμ μ κ·Όνκ³ μ€μ νλ λ°©λ²:
var matrix = Matrix(rows: 2, columns: 2)
matrix[0, 1] = 1.5 // 첫 λ²μ§Έ ν, λ λ²μ§Έ μ΄μ 1.5 μ€μ
matrix[1, 0] = 3.2 // λ λ²μ§Έ ν, 첫 λ²μ§Έ μ΄μ 3.2 μ€μ
λ€μ€ νλΌλ―Έν° μλΈμ€ν¬λ¦½νΈ: 2μ°¨μ μ΄μμ λ°μ΄ν° ꡬ쑰μ μ κ·Όν λ μ μ©ν©λλ€.
assert: μλͺ»λ μΈλ±μ€ μ κ·Όμ λ°©μ§νκΈ° μν΄ μ¬μ©νλ λλ²κΉ λꡬμ λλ€.
π νμ μλΈμ€ν¬λ¦½νΈ (Type Subscripts)
μ§κΈκΉμ§ λ³Έ μλΈμ€ν¬λ¦½νΈλ λͺ¨λ μΈμ€ν΄μ€ μλΈμ€ν¬λ¦½νΈμμ΅λλ€. Swiftλ νμ μ체μμ νΈμΆν μ μλ νμ μλΈμ€ν¬λ¦½νΈλ μ§μν©λλ€.
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
static subscript(n: Int) -> Planet {
return Planet(rawValue: n)!
}
}
let mars = Planet[4] // marsλ Planet.mars
print(mars) // mars
νμ μλΈμ€ν¬λ¦½νΈλ subscript ν€μλ μμ static ν€μλ(ꡬ쑰체μ μ΄κ±°ν) λλ class ν€μλ(ν΄λμ€)λ₯Ό λΆμ¬ μ μν©λλ€.
νμ μλΈμ€ν¬λ¦½νΈ(Type Subscript): μΈμ€ν΄μ€κ° μλ νμ μ체μμ νΈμΆλλ μλΈμ€ν¬λ¦½νΈμ λλ€.
static vs class: staticμ μ€λ²λΌμ΄λ©μ νμ©νμ§ μμ§λ§, ν΄λμ€μμ class ν€μλλ₯Ό μ¬μ©νλ©΄ νμ ν΄λμ€μμ μλΈμ€ν¬λ¦½νΈλ₯Ό μ€λ²λΌμ΄λ©ν μ μμ΅λλ€.
π μλΈμ€ν¬λ¦½νΈμ νμ©
μλΈμ€ν¬λ¦½νΈλ λ€μκ³Ό κ°μ μν©μμ νΉν μ μ©ν©λλ€:
- 컀μ€ν 컬λ μ νμ ꡬν: μμ λ§μ 컬λ μ νμ μ λ§λ€ λ μμ μ κ·Ό λ°©λ²μ μ§κ΄μ μΌλ‘ μ 곡
- 볡μ‘ν λ°μ΄ν° ꡬ쑰 μ κ·Ό: λ€μ°¨μ λ°°μ΄, νλ ¬ λ±μ κ°νΈνκ² μ κ·Ό
- νΉμ μΈλ±μ± ꡬν: νμ€ μΈλ±μ± λ°©μμ΄ μλ νΉλ³ν λ°©μμ μΈλ±μ± μ 곡
- κ³μ° κΈ°λ° μμ μ κ·Ό: μ€μ μ μ₯λ κ°μ΄ μλ κ³μ°λ κ°μ λ°ννλ μλΈμ€ν¬λ¦½νΈ ꡬν
π μ 리
μλΈμ€ν¬λ¦½νΈλ Swiftμμ 컬λ μ μμμ μ§κ΄μ μΌλ‘ μ κ·Όν μ μκ² ν΄μ£Όλ κ°λ ₯ν κΈ°λ₯μ λλ€. λ°°μ΄μ΄λ λμ λ리μ κ°μ νμ€ μ»¬λ μ νμ μμ μμ£Ό μ¬μ©λλ©°, μ¬μ©μ μ μ νμ μλ μ΄ κΈ°λ₯μ μΆκ°ν μ μμ΅λλ€.
μλΈμ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ©΄:
- λκ΄νΈ ꡬ문μΌλ‘ μμμ μ κ·Ό κ°λ₯
- μ¬λ¬ νλΌλ―Έν°λ₯Ό μ§μνλ λ€μ°¨μ μ κ·Ό κ°λ₯
- μ½κΈ° μ μ© λλ μ½κΈ°-μ°κΈ° κ°λ₯ν μ κ·Ό λ°©μ ꡬν κ°λ₯
- μΈμ€ν΄μ€ μμ€ λ° νμ μμ€μμ ꡬν κ°λ₯
μ΄λ¬ν μ μ°μ± λλΆμ μλΈμ€ν¬λ¦½νΈλ Swiftμμ 컬λ μ κ³Ό μνμ€λ₯Ό λ€λ£° λ μ½λμ κ°λ μ±κ³Ό ννλ ₯μ ν¬κ² ν₯μμν΅λλ€.
'π₯ Bread Basics > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Swift 곡μ λ¬Έμ μ 리 - μ΅μ λ 체μ΄λ (Optional Chaining) (0) | 2025.04.11 |
---|---|
Swift 곡μ λ¬Έμ μ 리 - μ΄κΈ°ν ν΄μ (Deinitialization) (1) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - μ΄κΈ°ν (Initialization) (0) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - μμ (Inheritance) (0) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - λ©μλ (Methods) (0) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - νλ‘νΌν° (Properties) (0) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - ꡬ쑰체μ ν΄λμ€ (Structures and Classes) (0) | 2025.04.11 |
Swift 곡μ λ¬Έμ μ 리 - μ΄κ±°ν (Enumerations) (0) | 2025.04.11 |