ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Any and AnyObject
    Swift 2023. 5. 8. 01:36

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Swift์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฒ”์šฉ ์ž๋ฃŒํ˜•์ธ Any, AnyObject์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค!

     

    ๋ฒ”์šฉ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‚จ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

    ๋ฒ”์šฉ ์ž๋ฃŒํ˜•์—๋Š” Any, AnyObject๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    Any๋กœ ์‹œ์ž‘ํ•˜๋Š” ํƒ€์ž…์„ Type Erased (Erasing) Wrapper๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Type์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

    Type์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Type Casting์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

     

     

    1. Any

    ํƒ€์ž…์„ Any๋กœ ์„ ์–ธํ•˜๋ฉด, ํƒ€์ž…์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์•„๋ž˜์™€ ๊ฐ™์ด ์ง์ ‘ Type Annotation์œผ๋กœ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๊ณ , Type Casting์„ ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    let list1: [Any] = [1, "2", 3.4, [5, 6, 7]]
    let list2 = [1, "2", 3.4, [5, 6, 7]] as [Any]

     

    Any ํƒ€์ž…์„ ์ด์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…์„ ๋ชจ๋‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    anyData๋Š” Any ํƒ€์ž…์ด๊ณ , ๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…์„ ๋ชจ๋‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    ๋‹ค์Œ์€ ์ฐธ์กฐ ํ˜•์‹ str์„ Any๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

     

     

    2. AnyObject

    AnyObject๋Š” ์ฐธ์กฐ ํƒ€์ž…๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’ ํƒ€์ž…์€ ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ๋งŒ์•ฝ ๊ฐ’ ํƒ€์ž…์„ ์ €์žฅํ•˜๋ฉด, ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ boxing์„ ํ•ฉ๋‹ˆ๋‹ค.

     

    Boxing์€ ๊ฐ’ ํƒ€์ž…์„ ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ, Unboxing์€ ์ฐธ์กฐ ํƒ€์ž…์— ์ €์žฅ๋œ ๊ฐ’์„ ๊บผ๋‚ด์„œ ๊ฐ’ ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

    ์ฆ‰, Boxing์€ ๊ฐ’ ํƒ€์ž…์„ ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๊ณ , Unboxing์€ ์ฐธ์กฐ ํƒ€์ž…์„ ๊ฐ’ ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

     

     

    ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

     

    #1์—์„œ String ํƒ€์ž…์ด ์ฐธ์กฐ ํƒ€์ž…์ธ NSString์œผ๋กœ Boxing ๋˜๊ณ ,

    #2์—์„œ ์ฐธ์กฐ ํƒ€์ž…์ธ NSString()์ด String ํƒ€์ž…์œผ๋กœ Unboxing ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    // #1. Boxing: ๊ฐ’ ํƒ€์ž… -> ์ฐธ์กฐ ํƒ€์ž…
    "str" as NSString
    
    // #2. Unboxing: ์ฐธ์กฐ ํƒ€์ž… -> ๊ฐ’ ํƒ€์ž…
    NSString() as String

     

     

    anyObject ๋ณ€์ˆ˜์— Type Annotation์„ ํ†ตํ•ด ์ฐธ์กฐ ํƒ€์ž…์„ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    anyObject๋Š” ์ฐธ์กฐ ํƒ€์ž…๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ’ ํƒ€์ž…์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

     

     

    ์ด๋ฒˆ์—” ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”!

    ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด Any, AnyObject๋Š” Type Erased Wrapper์ด๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Type Casting์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

     

    ์•„๋ž˜์™€ ๊ฐ™์ด Optional Binding + as? ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

    ๋˜ํ•œ Switch ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์œ„์˜ ์ฝ”๋“œ๋ฅผ Type Casting Pattern์œผ๋กœ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Type Casting Pattern์€ ๋ฒ”์šฉ ํƒ€์ž…์œผ๋กœ ์ €์žฅ๋œ ์ธ์Šคํ„ด์Šค ๋˜๋Š” Upcasting๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งค์นญ์‹œํ‚ฌ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

     

    ๋Œ“๊ธ€

Designed by Tistory.