๐ก ํ์ ์บ์คํ ?
- ์ธ์คํด์ค์ ํ์ ์ ํ์ธํ๊ฑฐ๋ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ๊ณ์ธต(hierachy)์ ์๋ ๋ค๋ฅธ superclass๋ subclass๋ก ์ทจ๊ธํ๋ ๋ฐฉ๋ฒ
is
- Checking Type
- ๋ง ๊ทธ๋๋ก, ํน์ ์ธ์คํด์ค์ ํ์ ์ ํ์ธํ ์ ์๋ ํค์๋
- ๋ฐํ์ ์์ ์ ์ค์ ์ฒดํฌ๊ฐ ์ด๋ค์ง
- ๋ฐํ ํ์ Bool
let exChar: Character = "A"
print(exChar is Character) // true
print(exChar is Int) // false
→ ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ํ์ ์ ํ์ธํ ์ ์๊ณ
import Foundation
class Human { }
class Student: Human { }
let yejin: Student = .init()
print(yejin is Student) // true
let mingyu: Human = .init()
print(mingyu is Student) // false
→ ์ด๋ ๊ฒ ์์๋์ด ์๋ class ๋ฅผ ํตํด, ํํ์์ด ํ์ ์ ์๋ธํด๋์ค์ธ ๊ฒฝ์ฐ์๋ true๋ฅผ ๋ฐํํ๋ค.
→ yejin์ Human ํด๋์ค์ ์์ ํด๋์ค์ธ Student์ ํด๋น๋์ด, ํ์ ์ฒดํฌ๋ฅผ ํด๋ณด๋ฉด true
→ mingyu๋ Human ํด๋์ค์ผ ๋ฟ์ด์ง ์์ํด๋์ค์ธ Student์ ํด๋น๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ํ์ ์ฒดํฌ๋ฅผ ํด๋ณด๋ฉด false
as
- Up Casting
- ์๋ธ ํด๋์ค ์ธ์คํด์ค๋ฅผ "์ํผ ํด๋์ค์ ํ์ "์ผ๋ก ์ฐธ์กฐ
- ์ ์บ์คํ ์ ํญ์ ์ฑ๊ณตํจ
- ์ปดํ์ผ ์์ ์ ์บ์คํ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์
import Foundation
class Human {
let name: String = "yejin"
}
class Student: Human {
let major: String = "CE"
}
let yejin = Student.init() as Human
print(yejin.name) // yejin
print(yejin.major) // ๐ซ Value of type 'Human' has no member 'major'
์ฌ๊ธฐ์
let yejin = Student.init() as Human
์, "Student ํ์ ์ผ๋ก yejin ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฒ ์ง๋ง, Human ํ์ ์ผ๋ก ์ ์บ์คํ ํด์ yejin์ ์ ์ฅ" ์ด๋ผ๋ ์๋ฏธ!
→ ์ค์ , yejin ํ์ ์ ์ ์บ์คํ ๋ Human ํ์
→ yejin์ ์ ๊ทผ๋ฒ์๋ Human์ผ๋ก ํ์ ๋จ.
๋ฐ๋ผ์,
print(yejin.name) // yejin
print(yejin.major) // ๐ซ Value of type 'Human' has no member 'major'
์ด๋ ๊ฒ major์๋ ์ ๊ทผํ ์ ์๊ฒ๋จ.
์ ์บ์คํ ์ ํ ๋๋,
let yejin = Student.init() as Human
// ์์ฒ๋ผ ํด๋ ๋๊ณ
// ์๋์ฒ๋ผ Type Annotation์ ์ฌ์ฉํด๋ ๋๋ค.
let yejin: Human = Student.init()
as? as!
- Down Casting
- up casting๊ณผ๋ ๋ฐ๋๋ก ์ํผํด๋์ค ์ธ์คํด์ค๋ฅผ ์๋ธํด๋์ค์ ํ์ ์ผ๋ก ์ฐธ์กฐํจ
- ์ ์บ์คํ ๋ ์ธ์คํด์ค๋ฅผ ๋ค์ ์๋ ์๋ธํด๋์ค ํ์ ์ผ๋ก ์ฐธ์กฐํ ๋ ์ฌ์ฉ
- upcasting์ฒ๋ผ ํญ์ ์ฑ๊ณตํ ์ ์๋๊ฒ ์๋๋ผ์ as?, as! ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
์๊น ์ ์บ์คํ ์์ ์์
print(yejin.major) // ๐ซ Value of type 'Human' has no member 'major'
์๋ก์ผ major ์๋ ์ ๊ทผํ ์ ์์๋๋ฐ
์ ์บ์คํ ๋ yejin ์ธ์คํด์ค๋ฅผ ๋ค์ ์๋ ์๋ธํด๋์ค ํ์ ์ผ๋ก ์ฐธ์กฐํ๊ธฐ ์ํด ๋ค์ด์บ์คํ ์ ํด์ค๋ค!
let student: Student = yejin as! Student
print(student.name) // yejin
print(student.major) // CE
๋ง์ฝ as! ๋์ as?๋ฅผ ์ด๋ค๋ฉด?
→ "๋ฐํ์ ์์ "์ ํ์ ์บ์คํ (๋ค์ด ์บ์คํ )์ ํ๋ฉฐ, ์คํจํ ๊ฒฝ์ฐ nil์ ๋ฆฌํด
→ as?๋ ์คํจํ ๊ฒฝ์ฐ๋ฅผ ๋๋น! ์์ฃผ ์์ ~!
→ nil์ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์, Optional-Type์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] lazy? (0) | 2022.08.21 |
---|---|
[Swift] Any / AnyObject (0) | 2022.08.14 |
[Swift] ์๋ธ์คํฌ๋ฆฝํธ (0) | 2022.08.13 |
[Swift] ์์ (0) | 2022.08.02 |
[Swift] ๋ฐฑ์ค : 10814 (๊ตฌ์กฐ์ฒด) (0) | 2022.08.02 |