-
[Swift] Any and AnyObjectSwift 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 StringanyObject ๋ณ์์ Type Annotation์ ํตํด ์ฐธ์กฐ ํ์ ์ ์ ์ฅํ๊ณ ์์ต๋๋ค.
anyObject๋ ์ฐธ์กฐ ํ์ ๋ง ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ ํ์ ์ ์ ์ฅํ๋ ค๊ณ ํ๋ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.

์ด๋ฒ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด๋ณด๋๋ก ํ ๊ฒ์!
์์ ๋งํ๋ฏ์ด Any, AnyObject๋ Type Erased Wrapper์ด๊ธฐ ๋๋ฌธ์ ํ์ ์ ๋ํ ์ ๋ณด๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Type Casting์ด ํ์ํฉ๋๋ค.
์๋์ ๊ฐ์ด Optional Binding + as? ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.

๋ํ Switch ๋ฌธ์ ์ด์ฉํ์ฌ ์์ ์ฝ๋๋ฅผ Type Casting Pattern์ผ๋ก ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
Type Casting Pattern์ ๋ฒ์ฉ ํ์ ์ผ๋ก ์ ์ฅ๋ ์ธ์คํด์ค ๋๋ Upcasting๋ ์ธ์คํด์ค๋ฅผ ๋งค์นญ์ํฌ ๋ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.

'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ