Swift

[Swift] ์ ‘๊ทผ์ œ์–ด : ์ฝ๊ธฐ ์ „์šฉ ๊ตฌํ˜„

yevdev 2022. 3. 19. 16:39

๐Ÿ’ก์ ‘๊ทผ์ œ์–ด์˜ ํ•„์š”์„ฑ

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ์ค‘์š”ํ•œ ์บก์Šํ™”์™€ ์€๋‹‰ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ด์œ ๋Š” ์œ„๋ถ€์—์„œ ๋ณด๊ฑฐ๋‚˜ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ ‘๊ทผ์ œ์–ด๋ฅผ ํ†ตํ•ด ๊ผญ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ’ก์ฝ๊ธฐ ์ „์šฉ ๊ตฌํ˜„

์„ค์ •์ž๋งŒ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์„ ๊ฐ–๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”์†Œ์˜ ์ ‘๊ทผ์ˆ˜์ค€ ํ‚ค์›Œ๋“œ ๋’ค์— ์ ‘๊ทผ์ˆ˜์ค€(set)์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•˜๋ฉด ์„ค์ •์ž์˜ ์ ‘๊ทผ์ˆ˜์ค€๋งŒ ๋” ๋‚ฎ๋„๋ก ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์„ค์ •์ž์˜ ์ ‘๊ทผ์ˆ˜์ค€ ์ œํ•œ์€ ํ”„๋กœํผํ‹ฐ, ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ, ๋ณ€์ˆ˜ ๋“ฑ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์š”์†Œ์˜ ์ ‘๊ทผ์ˆ˜์ค€๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ๋‚ฎ์€ ์ˆ˜์ค€์œผ๋กœ ์ œํ•œํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

public struct SomeType{
    // ๋น„๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ count
    private var count: Int = 0
    
    // ๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ publicStoredProperty
    public var publicStoredProperty: Int = 0
    
    // ๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ publicGetOnlyStoredProperty
    // ์„ค์ •์ž๋Š” ๋น„๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€
    public private(set) var publicGetOnlyStoredProperty: Int = 0
    
    // ๋‚ด๋ถ€ ์ ‘๊ทผ ์ˆ˜์ค€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ internalComputedProperty
    internal var internalComputedProperty: Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
    
    // ๋‚ด๋ถ€ ์ ‘๊ทผ ์ˆ˜์ค€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ internalGetOnlyComputedProperty
    // ์„ค์ •์ž๋Š” ๋น„๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€
    internal private(set) var internalGetOnlyComputedProperty: Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
    
    // ๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€ ์„œ๋ธŒ ์Šคํฌ๋ฆฝํŠธ
    public subscript() -> Int {
        get{
            return count
        }
        set{
            count += 1
        }
    }
    
    // ๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€ ์„œ๋ธŒ ์Šคํฌ๋ฆฝํŠธ
    // ์„ค์ •์ž๋Š” ๋‚ด๋ถ€ ์ ‘๊ทผ ์ˆ˜์ค€
    public internal(set) subscript(some: Int) -> Int{
        get{
            return count
        }
        set{
            count += 1
        }
    }
}

var someInstance: SomeType = SomeType()

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž, ์„ค์ •์ž ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
print(someInstance.publicStoredProperty)    // 0
someInstance.publicStoredProperty = 100

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ
print(someInstance.publicGetOnlyStoredProperty) // 0
//someInstance.publicGetOnlyStoredProperty = 100 // ์˜ค๋ฅ˜๋ฐœ์ƒ

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž, ์„ค์ •์ž ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
print(someInstance.internalComputedProperty)    // 0
someInstance.internalComputedProperty = 100

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
print(someInstance.internalGetOnlyComputedProperty) // 1
// someInstance.internalGetOnlyComputedProperty = 100 // ์˜ค๋ฅ˜ ๋ฐœ์ƒ

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž, ์„ค์ •์ž ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
print(someInstance[])   // 1
someInstance[] = 100

// ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ž๋งŒ, ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋Š” ์„ค์ •์ž๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
print(someInstance[0])  // 2
someInstance[0] = 100

 


Reference

Swift ์Šค์œ„ํ”„ํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์•ผ๊ณฐ