๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ

by hyebin (Helia) 2024. 3. 22.
๋ฐ˜์‘ํ˜•

์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ(Subscripts)

  • ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๊ทธ๋ฆฌ๊ณ  ์—ด๊ฑฐํ˜•์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ฝœ๋ ‰์…˜, ๋ฆฌ์ŠคํŠธ, ์‹œํ€€์Šค ๋“ฑ ์ง‘ํ•ฉ์˜ ํŠน์ • ๋ฉค๋ฒ„ ์—˜๋ฆฌ๋จผํŠธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•
  • ์ถ”๊ฐ€์ ์ธ ๋ฉ”์†Œ๋“œ ์—†์ด ํŠน์ • ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • ํ•˜๋‚˜์˜ ํƒ€์ž…์— ์—ฌ๋Ÿฌ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ค๋ฒ„๋กœ๋“œ(Overload)๋„ ๊ฐ€๋Šฅ
  • ๋‹จ์ผ ์ธ์ž ๊ฐ’์„ ๋„˜์–ด, ํ•„์š”์— ๋”ฐ๋ผ ๋ณต์ˆ˜ ์ธ์ž ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• (Subscript Syntax)

  • ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ๊ณ -์“ฐ๊ธฐ(read-write) ํ˜น์€ ์ฝ๊ธฐ ์ „์šฉ(read only)๋งŒ ๊ฐ€๋Šฅ
  • setter, getter ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„
subscript(index: Int) -> Int {
    get {
    	// ์ ์ ˆํ•œ ๋ฐ˜ํ™˜ ๊ฐ’
    }
    set(newValue) {
        // ์ ์ ˆํ•œ set ์•ก์…˜
    }
}
  • set์— ๋Œ€ํ•œ ์ธ์ž ๊ฐ’์„ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ newValue๋ฅผ ์‚ฌ์šฉ
  • get, set์„ ์ง€์šฐ๊ณ  ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด get์œผ๋กœ ๋™์ž‘ํ•ด ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ ์–ธ
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" ์ถœ๋ ฅ

 

์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ (Subscript Usage)

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]

numberOfLegs["bird"] = 2

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4, nil: 3]
print(numberOfLegs)
// [Optional("cat"): 4, nil: 3, Optional("spider"): 8, Optional("ant"): 6]

 

์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์˜ต์…˜(Subscript Options)

  • ์ž…๋ ฅ ์ธ์ž์˜ ์ˆซ์ž์— ์ œํ•œ์ด ์—†์Œ, ์ž…๋ ฅ ์ธ์ž์˜ ํƒ€์ž…๊ณผ ๋ฐ˜ํ™˜ ํƒ€์ž…์˜ ์ œํ•œ๋„ ์—†์Œ
  • in-out ์ธ์ž๋‚˜ ๊ธฐ๋ณธ ์ธ์ž ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Œ
  • ์˜ค๋ฒ„๋กœ๋”ฉ ํ—ˆ์šฉ → ์ธ์žํ˜•, ๋ฐ˜ํ™˜ํ˜•์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ์ˆ˜ ๋งŒํผ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์„ ์–ธ ๊ฐ€๋Šฅ
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), "Index out of range")
            return grid[(row * columns) + column]
        }

        set {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}

var matrix = Matrix(rows: 2, columns: 2)
let someValue = matrix[2, 2]
// [2, 2]๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋ ฌ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฏ€๋กœ assert๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜•

'โŒจ๏ธ Language > swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] ์ดˆ๊ธฐํ™”  (1) 2024.03.25
[Swift] ์ƒ์†  (0) 2024.03.22
[Swift] ๋ฉ”์„œ๋“œ  (0) 2024.03.21
[Swift] ํ”„๋กœํผํ‹ฐ  (0) 2024.03.20
[Swift] ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด  (0) 2024.03.19