Swift

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

yevdev 2022. 8. 13. 13:12

๐Ÿ’ก์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ(Subscript)?

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

 

โžฐ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•

subscript(index: Int) -> Int {
    get {
        // ์ ์ ˆํ•œ Return Value
    }
    set(newValue) {
        // ์ ์ ˆํ•œ Set Action
    }
}

 

๊ทผ๋ฐ ๊ทธ๋ƒฅ ์•„๋ž˜์ฒ˜๋Ÿผ

subscript(index: Int) -> Int {
	// ์ ์ ˆํ•œ ๋ฐ˜ํ™˜ ๊ฐ’
}

get, set ์•„๋ฌด๊ฒƒ๋„ ์—†์ด ์„ค์ •ํ•  ๊ฒฝ์šฐ, get์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์„œ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.

๐Ÿšซ get-only๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, set-only๋Š” ๋ถˆ๊ฐ€๋Šฅ

 

 

์˜ˆ์ œ์ฝ”๋“œ๋กœ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์˜ getter์™€ setter์˜ ์ ‘๊ทผ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž

import Foundation

struct ExList {
    var list: [Int] = [0,1,2,3,4]
    
    subscript(index: Int) -> Int {
        get {
            return list[index]
        }
        set {
            list[index] = newValue
        }
    }
}

var exList: ExList = .init()

print(exList[0]) // ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ getter ์ ‘๊ทผ
exList[1] = 9   // ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ setter ์ ‘๊ทผ

print(exList)

// 0
// ExList(list: [0, 9, 2, 3, 4])

 

 

 

๐Ÿ’กํƒ€์ž… ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ?

  • ํƒ€์ž… ํ”„๋กœํผํ‹ฐ / ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์ˆ˜์ (?)์ด์ง€ ์•Š๊ณ  ํƒ€์ž…๋งŒ ์•ˆ๋‹ค๋ฉด ์š”์†Œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ!
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด static, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด class ํ‚ค์›Œ๋“œ๋ฅผ subscript ํ‚ค์›Œ๋“œ ์•ž์— ๋ถ™์—ฌ์ฃผ๋ฉด ํƒ€์ž… ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋˜๋Š” ๊ฒƒ!

 

โžฐํƒ€์ž… ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ

import Foundation

struct ExList {
    static var list: [Int] = [0,1,2,3,4]
    
    static subscript(index: Int) -> Int {
        get {
            return list[index]
        }
        set {
            list[index] = newValue
        }
    }
}

print(ExList[3]) // ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ getter ์ ‘๊ทผ
ExList[1] = 9   // ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ setter ์ ‘๊ทผ

print(ExList[1])

// 3
// 9

→ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์—†์ด ํƒ€์ž…์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

'Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] Any / AnyObject  (0) 2022.08.14
[Swift] ํƒ€์ž…์บ์ŠคํŒ… : is, as  (0) 2022.08.13
[Swift] ์ƒ์†  (0) 2022.08.02
[Swift] ๋ฐฑ์ค€ : 10814 (๊ตฌ์กฐ์ฒด)  (0) 2022.08.02
[Swift] zip(_:_:)  (0) 2022.07.27