-
Type Casting Overview - Type CastingiOS/๐ Swift 2021. 1. 21. 00:42
Type Casting ์ ๋ ๊ฐ์ง๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
1. ์ธ์คํด์ค์ ํ์ ์ ํ์ธํ๋ ์๋จ์ ๋๋ค.
์ฌ๊ธฐ์๋ ` is ` ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
2. ์ธ์คํด์ค๋ฅผ ๊ทธ ํด๋์ค์ ์์๊ณ์ธต์ Superclass ํน์ Subclass๋ก ์ทจ๊ธํ๊ฒ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ` as ` ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ทจ๊ธํ๋ค (treat) ๋ ์๋ฏธ๋, ๊ธฐ์กด ์ธ์คํด์ค์ ํ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์ ์๋ Type Casting ์ ๊ฐ๋ฆฌํค๊ณ , ํ์๋ Type Conversion์ ๊ฐ๋ฆฌํต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ๋กํ ์ฝ๋ ํ๋์ ๋ ๋ฆฝ์ ์ธ ํ์ ์ด๊ณ , ์์์ด ๊ฐ๋ฅํ์ฌ ์์๊ณ์ธต์ด ํ์ฑ๋๋ฏ๋ก Type Casting์ ํ์ฉํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ Type Casting ์ Class ์ Protocol์ ํ์ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Defining a Class Hierarchy for Type Casting
๋ค์ ์ฝ๋๋ ์ฃผ์ด์ง ์ํฉ์ ๋๋ค.
class Transportation { var fare: Int init(fare: Int) { self.fare = fare } } /* Transportaion ์ Subclass */ class Metro: Transportation { var lineNumber: Int init(fare: Int, lineNumber: Int) { self.lineNumber = lineNumber super.init(fare: fare) } } /* Transportaion ์ ๋ ๋ค๋ฅธ Subclass */ class Bus: Transportation { var busNumber: Int init(fare: Int, busNumber: Int) { self.busNumber = busNumber super.init(fare: fare) } }
์๋ ์ฝ๋๋ ํ์ ์ ์ธ ์์ด ๋ฐฐ์ด์ Trasnportation ์ Subclass ๋ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฌด์์๋ก ์ง์ด๋ฃ๊ณ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ, list ๋ [Transportation] ํ์ ์ผ๋ก ํ์ ์ถ๋ก (Type Inference) ๋ฉ๋๋ค.
Swift's type checker is able to deduce that two subclasses have a common superclass of Transportation.
let list = [ Metro(fare: 1000, lineNumber: 3), Bus(fare: 700, busNumber: 6617), Metro(fare: 1100, lineNumber: 9), Bus(fare: 900, busNumber: 700), Bus(fare: 2700, busNumber: 100) ] // ํ์ ์ถ๋ก ๋์ด list๋ [Transportation] ํ์ ์ด ๋จ
๋ฉค๋ฒ๋ค๋ ๋ชจ๋ Transportaion ํ์ ์ผ๋ก ์บ์คํ ๋ ๊ฒ์ ๋๋ค!
์๋ฐํ ๋งํ๋ฉด ์ ์บ์คํ ๋์์ต๋๋ค.
๋!
๋ค์ ๊ธ: Checking Type & Downcasting - Type Casting
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Delegation (0) 2021.01.26 Checking Type & Downcasting - Type Casting (0) 2021.01.21 [Swift] ํ์ ์ผ๋ก์์ ํ๋กํ ์ฝ ( Protocol as Type ) (0) 2021.01.19 [Swift] ํ๋กํ ์ฝ ์์ฑ์ ์๊ตฌ์ฌํญ (Initializer Requirements) (0) 2021.01.19 [Swift] @main ๊ณผ ์ปค์คํ ์ํธ๋ฆฌ ํฌ์ธํธ (2) 2021.01.19