๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ Mobile/iOS

[iOS - Swift] Any, AnyObject์˜ ์ฐจ์ด์ ์€?

Swift๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋“ค์ด ์žˆ๋‹ค.

๋ณดํ†ต ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด C, Python, Java์—์„œ ์“ฐ์ด๋Š”

Int, Double, Float, String, Bool, Array๋“ฑ ์ •๋ง ๋งŽ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ฒ˜์Œ Swift๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ๋‚ฏ์„  ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์žˆ์—ˆ๋‹ค.

๋ฐ”๋กœ Any์™€ AnyObject ์ด๋‹ค.

Python์—์„œ๋Š” object ํƒ€์ž…๊ณผ ๋น„์Šทํ•˜๊ณ  C#์—์„œ๋„ object ํƒ€์ž…๊ณผ ๋น„์Šทํ•˜๋‹ค.

 

์˜ค๋Š˜์€ Swift์—์„œ์˜ Any์™€ AnyObject์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค. 

 

 

Any

์Šค์œ„ํ”„ํŠธ์˜ ๋ชจ๋“  ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…์ด๋‹ค.

๋ชจ๋“  ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

AnyObject

๋ชจ๋“  ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

AnyObject๋Š” ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ 'ํ”„๋กœํ† ์ฝœ' ์ด๋‹ค. 

 

์Šค์œ„ํ”„ํŠธ์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” AnyObject ํ”„๋กœํ† ์ฝœ์„

์ค€์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

Any์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž. 

 

var name : String

name = "gahyun"
print(name) 	//gahyun

name = 2023
print(name)	//ERROR

 

name์ด๋ผ๋Š” ๋ณ€์ˆ˜๋Š” Stringํƒ€์ž…์ด๋‹ค. "gahyun"์„ ๋„ฃ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ

2023์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

์ด์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…๋“ค์€ ์ง€์ •ํ•œ ํƒ€์ž… ์™ธ์—๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. 

 

var info = Any

info = "gahyun"
print(info)	//gahyun

info = 23
print(info)	//23

info = 167.7
print(info)	//167.7

 

info๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ Any๋กœ ํ•˜๋ฉด, String์ธ "gahyun"์„ ๋„ฃ์–ด๋„,

Int์ธ 23์„ ๋„ฃ์–ด๋„, Double 167.7์„ ๋„ฃ์–ด๋„ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

AnyObject์˜ ์˜ˆ์‹œ๋„ ์ฝ”๋“œ๋กœ ๋ณด์ž. 

 

class MyClass {
    var value: Int = 10
}

var anyObjectValue: AnyObject

anyObjectValue = MyClass()
print(anyObjectValue.value)  // 10

 

AnyObject ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋Š” ๊ฐ’์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•œ๋‹ค. 

 

 

 

 

Any ํƒ€์ž…์˜ ํƒ€์ž… ์บ์ŠคํŒ…

var info : Any

info = 23

// is ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํƒ€์ž… ํ™•์ธ
if info is Int {
    print("info is Int")
}

// as? ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํƒ€์ž… ๋ณ€ํ™˜ 
if let intValue = info as? Int {
    print("Int ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜" \(intValue))
} else {
    print("Int ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ๋ถˆ๊ฐ€")
}

 

 

 

AnyObject ํƒ€์ž…์˜ ํƒ€์ž… ์บ์ŠคํŒ…

class MyClass {
    var value: Int = 10	//Int ํƒ€์ž… ํ”„๋กœํผํ‹ฐ ์„ ์–ธ 
}

//newValue๋ฅผ AnyObject ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜๊ณ  MyClass ์ธ์Šคํ„ด์Šค ํ• ๋‹น
var newValue: AnyObject = MyClass()	

//is ์—ฐ์‚ฐ์œผ๋กœ newValue๊ฐ€ MyClass์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ
if newValue is MyClass {
    print("newValue is MyClass")
}

//as? ์—ฐ์‚ฐ์œผ๋กœ ํƒ€์ž… ์บ์ŠคํŒ… 
if let myClassInstance = newValue as? MyClass {
    print("value:", myClassInstance.value)
} else {
    print("newValue is not MyClass")	//myClassInstance๋Š” nil์ด ๋œ๋‹ค. 
}

 

 

 

728x90