Any & Any Object - ehrldyd15/Swift_Skills GitHub Wiki

Any & Any Object

1. Any & Any Object

ํƒ€์ž… ์บ์ŠคํŒ…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค๋ผ๋ฆฌ๋งŒ ์บ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,

Any์™€ AnyObject ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ƒ์† ๊ด€๊ณ„์— ์žˆ์ง€ ์•Š์•„๋„ ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

1-1 Any: ๋ชจ๋“  ํƒ€์ž…์„ ์ €์žฅ

    var nums: [Int] = []
     
    nums.append(1) โœ…
    nums.append(1.0) โŒ // Cannot convert value of type 'Double' to expected argument type 'Int'
    nums.append("sodeul") โŒ // Cannot convert value of type 'String' to expected argument type 'Int'
    nums.append(false) โŒ // Cannot convert value of type 'Bool' to expected argument type 'Int

๋‹น์—ฐํ•˜๊ฒ ์ง€๋งŒ ๋ฐฐ์—ด์„ Intํƒ€์ž…์œผ๋กœ ์„ ์–ธํ–ˆ์œผ๋ฉด Intํƒ€์ž… ์ด์™ธ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    var things: [Any] = []
     
    things.append(1)
    things.append(1.0)
    things.append("AAA")
    things.append(false)
    things.append(Human.init()))
    things.append({ print("I am AAA!") })

ํ•˜์ง€๋งŒ Any๋กœ ์„ ์–ธํ•˜๋ฉด ๋ชจ๋“  ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Any ํƒ€์ž…์—” Value ํƒ€์ž…(๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•), Reference ํƒ€์ž…(ํด๋ž˜์Šค, ํด๋กœ์ €)์ด๊ฑด ์ƒ๊ด€ ์—†์ด ๋ชจ๋‘ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

1-2 AnyObject: ๋ชจ๋“  ํด๋ž˜์Šค ํƒ€์ž…์„ ์ €์žฅํ•œ๋‹ค

AnyObject๋กœ ์„ ์–ธ๋  ๊ฒฝ์šฐ, ํด๋ž˜์Šค ํƒ€์ž…๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

    var things: [AnyObject] = []
     
    things.append(1) โŒ // Argument type 'Int' expected to be an instance of a class
    things.append(1.0) โŒ // Argument type 'Double' expected to be an instance of a class
    things.append("sodeul") โŒ // Argument type 'String' expected to be an instance of a class
    things.append(false) โŒ // Argument type 'Bool' expected to be an instance of a class
    things.append(Teacher.init())) โœ…
    things.append({ print("I am Sodeul!") }) โŒ // Argument type '()->()' expected to be an instance of a class

ํด๋ž˜์Šค ํƒ€์ž…์ธ Teacher ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋‹ค๋งŒ ์ €์žฅํ•˜๋ ค๋Š” ํƒ€์ž…์ด ํด๋ž˜์Šค์ด๋ฉด ๊ทธ๋งŒ์ด๋ผ

    things.append(Teacher.init()))
    things.append(Student.init()))   

์œ„์ฒ˜๋Ÿผ Human์ด๊ณ  Teacher์ด๊ณ  ์ƒ๊ด€์—†์ด ๋ชจ๋“  ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Any & AnyObejct์˜ ํƒ€์ž… ์บ์ŠคํŒ…

2-1 as๋ฅผ ์ด์šฉํ•œ ํŒจํ„ด ๋งค์นญ(switch)

as๋Š” ์—…์บ์ŠคํŒ… ํ˜น์€ ํŒจํ„ด๋งค์นญ์— ์“ฐ์ธ๋‹ค.

    for thing in things {
        switch thing {
        case _ as Int:
            print("Int Type!")
        case _ as Double:
            print("Double Type!")
        case _ as String:
            print("String Type!")
        case _ as Human:
            print("Human Type")
        case _ as () -> ():
            print("Closure Type")
        default:
            print("something else")
        }
    }

switch๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ํ•ด๋‹น ํƒ€์ž…์ผ ๊ฒฝ์šฐ(์บ์ŠคํŒ…์— ์„ฑ๊ณตํ–ˆ์„๋•Œ) case๋ฌธ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

2-2 as? as!๋ฅผ ์ด์šฉํ•œ ๋‹ค์šด์บ์ŠคํŒ…(Downcasting)

Any & AnyObject๊ฐ€ ๋ชจ๋“  ํƒ€์ž…์„ ์ €์žฅํ• ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋‹จ์ ๋„ ์žˆ๋‹ค.

    var name: Any = "AAA"

์ด๋Ÿฐ ์‹์œผ๋กœ Any๋กœ ์„ ์–ธ ํ–ˆ๋‹ค๊ณ  ํ•ด๋„ ๊ฒฐ๊ตญ์—๋Š” String ํƒ€์ž…์ด๋‹ค. ํ•˜์ง€๋งŒ name์— ๋Œ€๊ณ  String์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-07-07 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 11 06 26

์ž๋™์™„์„ฑ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ์–ต์ง€๋กœ String์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ ค๊ณ  ํ•ด๋„

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-07-07 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 11 07 15

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Any๋‚˜ AnyObject๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํƒ€์ž…์ด ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์—,

์ปดํŒŒ์ผ ์‹œ์ ์— ์œ„์™€ ๊ฐ™์ด ํ•ด๋‹น ํƒ€์ž…์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์—†๋‹ค.

๋•Œ๋ฌธ์— ํ•ด๋‹น ํƒ€์ž…์˜ ๋ฉค๋ฒ„์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ

๋”ฐ๋ผ์„œ, ๋งŒ์•ฝ Any ํƒ€์ž…์ธ name์„ String์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,

    if var name = name as? String {
        name.append("123")
    }

์œ„ ์ฒ˜๋Ÿผ as๋‚˜ as?๋ฅผ ํ†ตํ•ด, ๋‹ค์šด์บ์ŠคํŒ… ํ•œ ํ›„์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

3. Any์™€ AnyObject๋ฅผ ๋‚จ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

Swift๋Š” ํƒ€์ž…์— ๋ฏผ๊ฐํ•œ ์–ธ์–ด์ด๋‹ค.

Any์™€ AnyObject๋Š” ๊ทธ๋Ÿฐ Swift์˜ ์ปจ์…‰์— ์–ด๊ธ‹๋‚˜๋Š” ํƒ€์ž…์ด๋‹ค.

๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํƒ€์ž…์ด ๊ฒฐ์ •๋˜๊ธฐ ๋–„๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ, ํƒ€์ž…์บ์ŠคํŒ… ํ•˜๊ธฐ ์ „๊นŒ์ง„ 2๋ฒˆ๊ณผ ๊ฐ™์ด ๋งค์šฐ ์‚ฌ์šฉ์ด ๋ถˆํŽธํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

https://babbab2.tistory.com/128?category=828998