[Swift๐Ÿฆฉ] #12 ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ

12506 ๋‹จ์–ด swiftiOSiOS
  • ์ฝœ๋ ‰์…˜, ๋ชฉ๋ก, ์‹œํ€€์Šค ๋ฉค๋ฒ„ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ•ํ‚ค
  • ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์—์„œ ์ •์˜ ๊ฐ€๋Šฅ.

arr[index], dict[key] ์™€ ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์ธ์Šคํ„ด์Šค ์•ˆ์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ.

1. ๊ตฌ๋ฌธ

computed property ์™€ ์œ ์‚ฌ

supscript(index: Int) -> Int {
    get {
        // subscript ์— ๋Œ€ํ•œ ๊ฐ’์„ return
    }
    set(newValue) {
        // set
        // ๊ธฐ๋ณธ์ ์œผ๋กœ newValue ๋ผ๋Š” ์ธ์ž๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, 
        // ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค.
        // set ์€ ์—†์„ ์ˆ˜ ์žˆ์Œ.
    }
}
struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"

2. ์‚ฌ์šฉ

  • ๋ณดํ†ต์€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋กœ ์‚ฌ์šฉ๋จ.
  • optional ์„ subscript type ์— ์‚ฌ์šฉํ•˜๋Š”๋ฐ, dict[key] = nil ๋กœ ํ• ๋‹น์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

3. ์˜ต์…˜

  • ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ

    • ์—ฌ๋Ÿฌ๊ฐœ์ผ ์ˆ˜ ์žˆ์Œ
    • ํƒ€์ž…์€ ์ƒ๊ด€ ์—†์Œ
    • ๊ธฐ๋ณธ๊ฐ’์€ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ.
    • inout ์ธ์ž๋Š” ์•ˆ๋จ.
  • ๋ฐ˜ํ™˜๋„ ์—ญ์‹œ ์–ด๋–ค ํƒ€์ž…์ด๋“  ๊ฐ€๋Šฅ.

  • ์˜ค๋ฒ„๋กœ๋”ฉ ( ์ธ์žํ˜•, ๋ฐ˜ํ™˜ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰๋จ. == ๋งˆ์Œ๋Œ€๋กœ ์ธ์ž์™€ ๋ฐ˜ํ™˜๊ฐ’์„ ๋„ฃ์–ด์„œ ๊ตฌํ˜„ ) ๊ฐ€๋Šฅ.

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
        }
    }
}

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

grid[0, 1] // 0ํ–‰ 1์—ด 

4. Type Subscript

  • ํƒ€์ž… ์ž์ฒด์—์„œ ํ˜ธ์ถœ๋˜๋Š” subscript
  • static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœ.
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]
print(mars) // 4

์งˆ๋ฌธ

Subscripts์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • subscript ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ arr[1] ๊ณผ ๊ฐ™์€ ์ฝœ๋ ‰์…˜ ํƒ€์ž…์˜ ๋ฌธ๋ฒ•์œผ๋กœ enum, struct, class ์˜ ์ธ์Šคํ„ด์Šค ๋‚ด ์š”์†Œ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค.
  • getter, setter ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„, ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • nil ์„ set ํ•˜๋ฉด ํ• ๋‹น์ด ํ•ด์ œ๋œ๋‹ค.
  • ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…, ์—ฌ๋Ÿฌ ๊ฐœ ์ผ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’๋„ ์—ฌ๋Ÿฌ ํƒ€์ž…์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ธฐ๋ณธ ๊ฐ’์€ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ , inout ์ธ์ž๋„ ์•ˆ๋จ.
    • ์ž…๋ ฅ๊ฐ’, ์ถœ๋ ฅ๊ฐ’์˜ ๊ฐœ์ˆ˜์™€ ํƒ€์ž… ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์œ ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

String์€ ์™œ subscript๋กœ ์ ‘๊ทผ์ด ์•ˆ๋˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ๊ทธ๋Ÿฌ๋„ค..?
  • ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” Subscript ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, Swift ์—์„œ๋Š” Index ๋กœ ์ ‘๊ทผํ•œ๋‹ค.

Why..?

  • Swift ๋Š” ์—ฌ๋Ÿฌ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๋„ ์ทจ๊ธ‰ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,, ์ด๋ชจ์ง€ ๐Ÿซฃ๐Ÿซ ๐Ÿซฅ
  • ๐Ÿˆโ€โฌ› : ์˜†์˜ ๊ฒ€์€ ๊ณ ์–‘์ด ๊ฐ™์€ ๊ฒฝ์šฐ ๐Ÿˆโฌ›๏ธ๋‘ ์ด๋ชจํ‹ฐ์ฝ˜์˜ ํ•ฉ์ด๋‹ค. ํ•˜๋‚˜์˜ ๋ฌธ์ž์ด์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ UnicodeScalar๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ. ์ด๋ ‡๊ฒŒ String ์€ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ด๊ณ  ์—ฌ๋Ÿฌ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ๋„ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, Subscript๋กœ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

๊ทธ๋Ÿผ ์ฝ”ํ…Œ๋Š” ์–ด๋–ป๊ฒŒ ๋ณด๋‚˜์š”.. Index์— ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•˜๋‚˜..? ์‚ฌ์‹ค ํŒŒ์ด์ฌ์œผ๋กœ ๋ณผ๊ฑฐ์ž„

  • Index ์ฐพ๋Š” ๊ฒƒ์ด O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”ํ…Œ ํ’€๊ธฐ์—” ๋ถ€์ ํ•ฉ.
  • Array(str) ๋กœ Character ํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž!!!

์ถœ์ฒ˜
https://bbiguduk.gitbook.io/swift/language-guide-1/initialization
https://jcsoohwancho.github.io/2019-11-19-Swift-String-ํšจ์œจ์ ์œผ๋กœ-์“ฐ๊ธฐ/

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ